Changer son stdin

MALOUMBA Messages postés 11 Statut Membre -  
 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.

3 réponses

loupius
 
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.
0
MALOUMBA Messages postés 11 Statut Membre
 
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
0
loupius
 
Effectivement, si tu as besoin de vraiment rediriger une entrée/sortie standard, tu peux utiliser la fonction freopen; son prototype est:
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".
0
MALOUMBA Messages postés 11 Statut Membre
 
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
0
loupius > MALOUMBA Messages postés 11 Statut Membre
 
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).
0