grazie per le risposte, al momento il codice è questo, probabilmente contiene degli errori ma a causa del problema che ho postato non ho potuto ancora testarlo.
Detta in breve, il padre crea 1 figlio A, il figlio A crea un figlio B. Il figlio B esegue la ps, il figlio A la grep, il padre wc.codice:/* Scrivere un programma C e Posix che implementi la seguente pipeline acquisita da input * da riga di comando: ps -f | grep *.txt | wc -c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <sys/types.h> #include <errno.h> int main(int argc, char *argv[]) { pid_t figlioA, figlioB; int fdpipe1[2], fdpipe2[2], i; if (argc!=9) printf("%d\n", argc); pipe(fdpipe1); if ((figlioA = fork()) < 0) //Creazione figlio A perror("Errore fork1"); else if (figlioA == 0) { //Figlio A close(fdpipe1[0]); dup2(fdpipe1[1], 1); pipe(fdpipe2); dup2(fdpipe2[0], 0); if ((figlioB = fork()) < 0) //Creazione figlio B, figlio di A perror("Errore fork2"); else if (figlioB == 0){ //Figlio B close(fdpipe2[0]); dup2(fdpipe2[1], 1); close(fdpipe2[1]); execlp(argv[1], argv[1], argv[2], NULL); } else { //Continuo figlio A waitpid(figlioB, NULL, 0); close(fdpipe2[1]); execlp(argv[4], argv[4], argv[5], NULL); } } else { //Il padre close(fdpipe1[1]); dup2(fdpipe1[0], 0); waitpid(figlioA, NULL, 0); execlp(argv[7], argv[7], argv[8], NULL); } }
Ora coi vostri consigli, sia con " ", che con ' ', il risultato di argc è 2, cioè il nome dell'eseguibile e la scritta, ora dovrei fare un parsing su argv[2] e sistemarmi il codice immagino.
Giusto? Notate altri problemi?
EDIT: Pero' pensandoci, mi sembra stupido fare un parsing, potrei semplicemente vedere se la stringa è stata scritta in quella maniera con una strcmp e poi mettere nelle varie execlp le parti che mi servono come stringhe. Questo rendebbe l'esercizio abbastanza strano pero', sono forse io che mi faccio troppi problemi?

Rispondi quotando