[PIPE]programme qui se termine mal
Sujet: [PIPE]programme qui se termine mal De: philuxNO (l' arobase) SPAMtuxfamily.org Groupes: fr.comp.lang.c
Organisation: Guest of ProXad - France
Date: 11. Oct 2008, 21:55:02
Salut à tous, je suis en train de devellopper un shell UNIX, et je
bloque un peu sur les pipes.
Donc j'ai écris un programme tout simple qui simule un
'ls -l | grep main'...
Voilà le code :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int exec_grep(int i)
{
int p[2];
int status;
pid_t pid;
pipe(p);
printf("pid = %d\n", getpid());
pid = fork();
if (pid > 0)
{
/* FILS */
if(i == 0)
{
close(p[0]);
close(1);
dup(p[1]);
execlp("ls", "ls", "-l", NULL);
}
else
execlp("grep", "grep", "main", NULL);
exit(127);
}
else if(pid != -1)
{
/* Père */
if(i == 0)
waitpid(pid, &status, WNOHANG);
else
wait(NULL);
if(i == 0)
{
close(p[1]);
close(0);
dup(p[0]);
exec_grep(1);
}
else
exit(status);
}
return 0;
}
int main(void)
{
int i = 0;
exec_grep(i);
return 0;
}
/*************************/
Le code est assez simple, au premier appel de exec_grep on ouvre les
pipes, puis au second, on execute le grep.
Le problème c'est que parfois le programme s'execute bien, mais parfois
il bloque, il ne se termine pas normalement, je tape une fois entrée et
il se termine.... Bref, je voudrais savoir ce qui cloche dans mon petit
bout de programme, je suis programmeur débutant, donc si vous avez une
meillieure manière de procéder pour faire un pipe....
Merci :)
|
|