Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

stdin

13 réponses
Avatar
Jean Pierre Daviau
Bonjour à tous et bonne année,

Peut-on définir stdin comme fichier.txt dans une fonction?

ex: stdin = fopen('fichier.txt' , 'r');
ex: stdin = fopen(argv[1], 'r');
--
Grand merci

Jean Pierre Daviau
--
windows Xp
asus p4 s533/333/133
Intel(R) Celeron (R) CPU 2.00 GHz
Processor Radeon7000 0x5159 agp

3 réponses

1 2
Avatar
Jean Pierre Daviau
En tous cas, il me semble exagéré d'en conclure qu'il ne faut
pas utiliser
freopen() pour rediriger stdin, comme tu sembles le faire
ci-dessus.


Au contraire. Sur windows flose(stdin) semble poser problème et
pas freopen.

Cette discussion n'ayant aucun intérêt dans ce groupe, je ne la
poursuivrais
pas.

Moi non plus

Avatar
Vincent Lefevre
Dans l'article <479dc0c4$0$25069$,
Antoine Leca écrit:

En news:20080128011905$, Vincent Lefevre va
escriure:
Dans l'article <479c9088$0$955$,
Charlie Gordon écrit:

Ca marche par miracle dans ton environnement, mais ce n'est pas
portable et totalement déconseillé.
Pour faire "pointer" stdin sur un fichier, il faut utiliser freopen:

freopen("chstdin.c", "r", stdin);


Ça a un peu plus de chance de marcher que le fclose + fopen, mais là
encore, rien n'est garanti


Qu'est-ce qui n'est pas garanti ?


D'avoir le comportement auquel on s'attend.

En tous cas, il me semble exagéré d'en conclure qu'il ne faut pas utiliser
freopen() pour rediriger stdin, comme tu sembles le faire ci-dessus.


Je ne dis pas qu'il ne faut pas l'utiliser. Mais sans contexte, on ne
peut pas dire que ça va marcher comme on le veut.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)



Avatar
Vincent Lefevre
Dans l'article ,
Erwan David écrit:

Aris écrivait :

LA solution c'est de ne pas prendre comme hypothèse qu'on va lire
depuis stdin, et de rajouter un parametre de type FILE* à chaque
fonction du code pour définir l'entrée. C'est d'ailleur ce qui aurait
du être fait en premier dans un bon design de code.
Avec ça, plus de malentendu possible, on ouvre un fichier ou on
utilise stdin. Plus besoin de fermer stdin ou stdout (d'ailleur
pourquoi faudrait-il les fermer ?)


Sur un système POSIX, un démon doit les fermer pour libérer son
terminal.


En général, il ne les ferme pas, mais les redirige vers un fichier,
/dev/null par exemple. C'est ce que fait la fonction BSD daemon().

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


1 2