Je suis en train d'écrire un petit programme qui met en œuvre des tuyaux comme ils fonctionnent dans la shell. ie:
ls -hal | sort | grep p | wc
ça fonctionne bien, avec le léger problème que sur une ligne, lorsque CMD_NO=n, la comparaison i est plus grande que CMD_NO ne fonctionne pas, mais i!=(CMD_NO-1) fonctionne. J'essaie de comprendre pourquoi dans ce cas particulier (la ligne est commentée comme LIGNE PROBLÉMATIQUE dans le code) ces déclarations ne sont pas équivalentes. Merci beaucoup.
#include
#include
#include
#include
#include
#define READ_END 0
#define WRITE_END 1
#define CMDS_NO 5
int main (int argc, char **argv)
{
pid_t pid;
int new_fds[2];
int old_fds[2];
char *array[CMDS_NO];
char *param[CMDS_NO];
array[0]="ls";
array[1]="sort";
array[2]="grep";
array[3]="grep";
array[4]="wc";
param[0]="-hal";
param[1]=NULL;
param[2]="p";
param[3]="out";
param[4]=NULL;
for (int i=0; i1) {
close(old_fds[0]);
close(old_fds[1]);
}
while (1) { //attendre que les processus enfants se terminent
wait(NULL);
if(errno== ECHILD) {
printf("tous les enfants sont terminés\n");
break;
}
}
return 0;
}