Bonjour,

J'ai actuellement un problème lie aux file descriptors:

J'ai code des fonctions qui grâce a dup2() redirigent l'entrée ou la sortie standard vers des fichiers, et jusque la tout va bien...

Il s'agit d'un programme qui doit tourner en boucle (un shell), le soucis est que pour les fonctions basiques comme les redirections, un fork(), un dup2() et un close... Je récupère bien mon entrée ou ma sortie standard au tour suivant.

Mais lorsque je les enchainent entre elles, je perds soit l'entrée, soit la sortie, soit les 2 selon les modifications que j'ai voulut apporter au code !

Je suppose que le problème vient du fait que dup2(fd_new, fd_old) close automatiquement fd_old, ma question est donc assez précise, j'aimerais "sauvegarder" mon entrée et ma sortie standard en début de fonction, avant de fork() quoi que ce soit grâce a l'appel système dup(), et j'aimerais en fin de fonction le ré-attribuer ==> grâce a dup2() ?

Voici un schémas de ce que j'aimerais faire, mais je trouve cela un peu... Bizarre:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void    exemple()
{
int fd_in;
int fd;
pid_t pid;
 
fd_in = dup(0); /*Rassurez moi, 0 n'est pas censé se close ?^^*/
 
...
pid = fork();
...
dup2(fd, 0); /*Ici je close l'entrée standard*/
...
 
dup2(0, fd_in); /*Récupération de l'entrée standard ?*/
}
Merci !