conserver stdin

Le
Jean Pierre Daviau
Bonjour à tous,

Si je lis stdin et l'envoie dans un fichier, y a-t-il moyen de
conserver stdin autrement que d'utiliser le fichier où j'ai
copier son flux?

Amicalement

Jean Pierre Daviau
--
windows Xp
asus p4 s533/333/133
Intel(R) Celeron (R) CPU 2.00 GHz
Processor Radeon7000 0x5159 agp
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Xavier Roche
Le #993040
Si je lis stdin et l'envoie dans un fichier, y a-t-il moyen de
conserver stdin autrement que d'utiliser le fichier où j'ai
copier son flux?


Non. Même si ungetc() peut ressembler à ce que vous voulez faire, son
usage est un peu désuet et sa spécification un peu limitée (en gros, un
seul caractère peut être "remis" dans le flux de manière sûre)

Jean Pierre Daviau
Le #993039
Donc, il faudrait quelque chose genre
char tampon[256];
char tampon[];
tampon = fgets(tampon, sizeof(tampon), stdin);
-----------
Ici je crois que la norme veut une constante?
char tampon[fgets(tampon, sizeof(tampon), stdin)];
??

w

"Xavier Roche" message de news: f91oo3$nv$
Si je lis stdin et l'envoie dans un fichier, y a-t-il moyen de
conserver stdin autrement que d'utiliser le fichier où j'ai
copier son flux?


Non. Même si ungetc() peut ressembler à ce que vous voulez
faire, son usage est un peu désuet et sa spécification un peu
limitée (en gros, un seul caractère peut être "remis" dans le
flux de manière sûre)



Pascal Bourguignon
Le #993038
"Jean Pierre Daviau"
Bonjour à tous,

Si je lis stdin et l'envoie dans un fichier, y a-t-il moyen de
conserver stdin autrement que d'utiliser le fichier où j'ai
copier son flux?


Non. Mais si tu es faignant, tu peux utiliser tee:

( tee copy-of-stdin - | ton-programme copy-of-stdin ) < input

Il faut que ton-programme lise d'abord stdin, et quand c'est fini, il
peut lire le fichier indiqué en argument.


--
__Pascal Bourguignon__ http://www.informatimago.com/

Vincent Lefevre
Le #993037
Dans l'article Jean Pierre Daviau
Ici je crois que la norme veut une constante?
char tampon[fgets(tampon, sizeof(tampon), stdin)];
??


Rien à voir avec une taille constante. Il faut évidemment que la
taille soit connue *avant* l'appel de fgets! Donc aucun langage
ne permettra de faire ce que tu écris ci-dessus (ou alors il faut
que ce soit la fonction qui réserve la mémoire). C'est juste une
question de logique...

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Jean Pierre Daviau
Le #992856
Merci.


On ne peur pas connaître d'avance la taille de STDIN? Il n'y a
pas de sizeof(stdin)?

Alors là, il n'y a qu'à réouvrir un fichier.


"Vincent Lefevre" message de news: 20070804172939$
Dans l'article Jean Pierre Daviau
Ici je crois que la norme veut une constante?
char tampon[fgets(tampon, sizeof(tampon), stdin)];
??


Rien à voir avec une taille constante. Il faut évidemment que
la
taille soit connue *avant* l'appel de fgets! Donc aucun langage
ne permettra de faire ce que tu écris ci-dessus (ou alors il
faut
que ce soit la fonction qui réserve la mémoire). C'est juste
une
question de logique...

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog:
Work: CR INRIA - computer arithmetic / Arenaire project (LIP,
ENS-Lyon)



Vincent Lefevre
Le #992855
Dans l'article Jean Pierre Daviau
On ne peur pas connaître d'avance la taille de STDIN?


stdin n'a pas de taille a priori: c'est un flux potentiellement
infini. Et même une fois stdin fermé, comme ce n'est pas un fichier
normal (enfin, pas forcément), le seul moyen de connaître sa taille
est de le lire. Mais quand on le lit, on perd toutes les données non
stockées. Donc si tu veux stocker les données de stdin, tu dois le
faire sans connaître sa taille.

Il n'y a pas de sizeof(stdin)?


stdin est juste un pointeur sur une structure de données (qui contient
les infos pour lire le fichier, mais pas le contenu du fichier...
surtout si le fichier est un flux infini[*]). sizeof(stdin) va donc
te renvoyer une valeur style 4 ou 8. Pour connaître la taille d'un
fichier, il faut utiliser des fonctions comme fseek, mais justement,
fseek ne marche pas sur tous les fichiers.

[*] Par exemple, sous Linux, tu as /dev/zero, qui correspond à une
suite infinie d'octets nuls.

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Publicité
Poster une réponse
Anonyme