/* * Exemplo de uso de pipes. * cmd1 | cmd2 args2 * * Nesta versão simplificada, cmd1 não pode * receber argumentos. */ #include #include #include #include #include #include int main (int argc, char** argv) { int mypipe[2]; if (argc < 3) exit(-1); pipe (mypipe); /* Cria o pipe mypipe. mypipe[0] - leitura mypipe[1] - escrita */ if (fork() != 0) if (fork() != 0) {/* Pai (shell) */ close (mypipe[1]); wait(NULL); wait(NULL); } else { close (mypipe[1]); /* CMD 2 */ dup2(mypipe[0], 0); execve (argv[2], &argv[2],0); printf("Erro em cmd2\n" ); } else { close (mypipe[0]); /* CMD 1 */ dup2(mypipe[1], 1); close(mypipe[1]); argv[2] = NULL; /* cmd2 não é necessário */ execve(argv[1], &argv[1], 0); printf("Erro em cmd1\n"); } return 0; }