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
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.
Dans l'article <479dc0c4$0$25069$426a74cc@news.free.fr>,
Antoine Leca <root@localhost.invalid> écrit:
En news:20080128011905$55f1@prunille.vinc17.org, Vincent Lefevre va
escriure:
Dans l'article <479c9088$0$955$426a34cc@news.free.fr>,
Charlie Gordon <news@chqrlie.org> é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.
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.
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().
Dans l'article <86wspuf8e5.fsf@nez-casse.depot.rail.eu.org>,
Erwan David <erwan@rail.eu.org> écrit:
Aris <aris@badcode.be> é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().
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().