Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Xavier Roche
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) <http://www.opengroup.org/pubs/online/7908799/xsh/ungetc.html>
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)
<http://www.opengroup.org/pubs/online/7908799/xsh/ungetc.html>
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) <http://www.opengroup.org/pubs/online/7908799/xsh/ungetc.html>
Jean Pierre Daviau
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" a écrit dans le 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) <http://www.opengroup.org/pubs/online/7908799/xsh/ungetc.html>
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" <xroche@free.fr.NOSPAM.invalid> a écrit dans le
message de news: f91oo3$nv$3@news.httrack.net...
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)
<http://www.opengroup.org/pubs/online/7908799/xsh/ungetc.html>
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" a écrit dans le 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) <http://www.opengroup.org/pubs/online/7908799/xsh/ungetc.html>
Pascal Bourguignon
"Jean Pierre Daviau" writes:
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.
Dans l'article <xz_si.31969$, Jean Pierre Daviau écrit:
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...
Dans l'article <xz_si.31969$le4.126047@wagner.videotron.net>,
Jean Pierre Daviau <Once@waseno.ugh> écrit:
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...
Dans l'article <xz_si.31969$, Jean Pierre Daviau écrit:
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...
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" <vincent+ a écrit dans le message de news: 20070804172939$
Dans l'article <xz_si.31969$, Jean Pierre Daviau écrit:
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...
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" <vincent+news@vinc17.org> a écrit dans le
message de news: 20070804172939$32e3@prunille.vinc17.org...
Dans l'article <xz_si.31969$le4.126047@wagner.videotron.net>,
Jean Pierre Daviau <Once@waseno.ugh> écrit:
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...
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" <vincent+ a écrit dans le message de news: 20070804172939$
Dans l'article <xz_si.31969$, Jean Pierre Daviau écrit:
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...
Dans l'article <SSiti.463$, Jean Pierre Daviau écrit:
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.
Dans l'article <SSiti.463$VN1.1069@wagner.videotron.net>,
Jean Pierre Daviau <Once@waseno.ugh> écrit:
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.
Dans l'article <SSiti.463$, Jean Pierre Daviau écrit:
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.