OVH Cloud OVH Cloud

Deux passes de stdin

14 réponses
Avatar
florian
Bonjour,

je vais surement me faire traiter de noob ;), mais je bloque un peu..

J'aimerai lire deux fois stdin, =E0 l'aide de fgets.

La premi=E8re passe se d=E9roule bien.

Pour revenir au d=E9but, j'ai tent=E9 un rewind(stdin).

Mais, lors de la seconde passe, feof est vrai, et fgets renvoie
NULL...

Surement un truc tout b=EAte mais..

a+

4 réponses

1 2
Avatar
Jean-Marc Bourguet
"Antoine Leca" writes:

En news:, Jean-Marc Bourguet va escriure:

popen et ouvrir le fichier deux fois


Si la première passe a besoin de lire le fichier complètement avant que ne
se lance la seconde passe, tu vas demander au système de stocker en mémoire
tampon la totalité des 150×n Mo décomprimés (en attente de lecture sur le
deuxième descripteur de fichier).

Et un certain nombre d'implémentation vont te faire un bras d'honneur très
vite (par exemple, Unix original ne permet de stocker les tubes que dans les
entrées directes des inodes, cela risque de ne pas suffir ici;-)); tandis
que d'autres vont essayer de faire de leur mieux, et risquent de swapper
férocement.

Sans parler des systèmes plus exotiques (Windows ? que dit Posix ?) qui vont
refuser tout court la seconde ouverture.


Je m'étais mal exprimé et avais indiqué une solution à laquelle je ne
pensais pas. Je voulais dire faire deux popen...

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Antoine Leca
En news:,
Jean-Marc Bourguet va escriure:
"Antoine Leca" writes:

En news:, Jean-Marc Bourguet va
escriure:

popen et ouvrir le fichier deux fois


Si la première passe a besoin de lire le fichier complètement avant
que ne se lance la seconde passe, tu vas demander au système de
stocker en mémoire tampon la totalité des 150×n Mo décomprimés (en
attente de lecture sur le deuxième descripteur de fichier).


Je m'étais mal exprimé et avais indiqué une solution à laquelle je ne
pensais pas. Je voulais dire faire deux popen...


Je n'ai jamais essayé (popen et Windows, c'est pas franchement le grand
amour), mais à mon humble avis tu vas obliger le système à faire deux
décompressions complètes, non ?


Antoine



Avatar
Jean-Marc Bourguet
"Antoine Leca" writes:

Je m'étais mal exprimé et avais indiqué une solution à laquelle je ne
pensais pas. Je voulais dire faire deux popen...


Je n'ai jamais essayé (popen et Windows, c'est pas franchement le grand
amour), mais à mon humble avis tu vas obliger le système à faire deux
décompressions complètes, non ?


Oui; ce qui -- suivant le taux de compression, la mémoire disponible, les
algo de cache de l'OS, ... -- peut être plus rapide que de tout mettre en
mémoire.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Antoine Leca
En news:,
Jean-Marc Bourguet va escriure:
"Antoine Leca" writes:

Je m'étais mal exprimé et avais indiqué une solution à laquelle je
ne pensais pas. Je voulais dire faire deux popen...


Je n'ai jamais essayé (popen et Windows, c'est pas franchement le
grand amour), mais à mon humble avis tu vas obliger le système à
faire deux décompressions complètes, non ?


Oui; ce qui -- suivant le taux de compression, la mémoire disponible,
les algo de cache de l'OS, ... -- peut être plus rapide que de tout
mettre en mémoire.


Oui (y compris pour le putatif!)
C'est pour cette raison que j'avais constamment cité les deux solutions,
mais c'est vrai que je n'avais pas explicité le pourquoi.
Donc merci pour l'avoir fait.


Antoine



1 2