Changer son stdin
MALOUMBA
Messages postés
11
Statut
Membre
-
loupius -
loupius -
Bonjour,
Je débute en C et j'aimerais savoir si ,sans utiliser de commande shell du terminal Ubuntu pour la redirection des entrées standart, je peux dans un programme c Spécifier un fichier d'entrée standart (stdin) que j'ai créé et de meme un fichier de sorties standart (stdout).
Si oui comment j'y parviens ?
Je vous remercie à l'avance.
Je débute en C et j'aimerais savoir si ,sans utiliser de commande shell du terminal Ubuntu pour la redirection des entrées standart, je peux dans un programme c Spécifier un fichier d'entrée standart (stdin) que j'ai créé et de meme un fichier de sorties standart (stdout).
Si oui comment j'y parviens ?
Je vous remercie à l'avance.
3 réponses
Tout à fait, au lieu d'utiliser un printf, il suffit d'utiliser 'int fprintf (FILE* stream, const char* format [, argument, ...]);
de même pour le scanf.
de même pour le scanf.
Je crois voir ce que tu veux dire mais , en fait dans mon programme je me sert des commandes getchar et putchar impérativement et uniquement( j'ai oublié de préciser :) ), pas putc et getc) donc en fait faut impérativement que je parametre mon stdout et mon stdin dans mon main je pense.
J'ai trouvé freopen(...) pour changer de stdin et stdout mais le pointeur "stream" represente quoi ? Le nouveau fichier du flot d'entrée?
si tu as une autre solution je suis toujours prenant...
Grand Merci
J'ai trouvé freopen(...) pour changer de stdin et stdout mais le pointeur "stream" represente quoi ? Le nouveau fichier du flot d'entrée?
si tu as une autre solution je suis toujours prenant...
Grand Merci
Effectivement, si tu as besoin de vraiment rediriger une entrée/sortie standard, tu peux utiliser la fonction freopen; son prototype est:
- flux est le flux à remplacer (dans ton cas stdin ou stdout)
- mode est le mode d'ouverture du fichier ("r" ou "r+" pour remplacer un stdin, "w" ou "w+" pour remplacer un stdout)
- nomFichier... évident
- un pointeur sur le fichier ouvert est renvoyé (NULL si erreur)
Un exemple:
FILE* freopen (const char* nomFichier, const char* mode, FILE* flux);avec:
- flux est le flux à remplacer (dans ton cas stdin ou stdout)
- mode est le mode d'ouverture du fichier ("r" ou "r+" pour remplacer un stdin, "w" ou "w+" pour remplacer un stdout)
- nomFichier... évident
- un pointeur sur le fichier ouvert est renvoyé (NULL si erreur)
Un exemple:
if (freopen ("fichier", "w", stdout) == NULL)
exit (1);
printf ("Essai d'écriture sur le nouveau stdout\n");Tu dois retouver un fichier de nom 'fichier' avec le contenu "Essai d'écriture sur le nouveau stdout".
Je vais essayer je te signaler mes resultats.
Mais déja je voudrais savoir si les changements que je fais ,du stdin et stdout, dans mon main ,ne seront fait que pour l'éxécution de ce programme seulement ou bien ca vaudra aussi pour tout autre programme indépendant?
Et au fait c'est quoi le nom des fichiers standart de sortie et d'entrée sous linux par défaut?
Merci
Mais déja je voudrais savoir si les changements que je fais ,du stdin et stdout, dans mon main ,ne seront fait que pour l'éxécution de ce programme seulement ou bien ca vaudra aussi pour tout autre programme indépendant?
Et au fait c'est quoi le nom des fichiers standart de sortie et d'entrée sous linux par défaut?
Merci
Le nom des fichiers standards d'entrée et de sortie, sous Linux, sont bien respectivement stdin et stdout. Ces entrée/sortie n'appartiennent pas au C mais sont définies dans 'stdio.h'; ce sont des pointeurs de type 'FILE*'.
La redirection des entrées/sorties ne vaut bien sûr que pour le programme les ayant faites (voir la commande 'fork' et sa politique d'héritage).
La redirection des entrées/sorties ne vaut bien sûr que pour le programme les ayant faites (voir la commande 'fork' et sa politique d'héritage).