0
我已經通過使用一個管道成功地管道輸出了一個命令。N命令管道「進程間」
我想和其中每個命令表示處理N個連續的命令來做到這一點。
這是我在流水線一條命令的嘗試,因此,爲了使命令的具有N序列我需要N-1的管道?以及所有進程的父親如何收集輸出並打印輸出。
謝謝。
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
int main(int argc ,char *argv[])
{
int i,pid;
int fd[2];//crea i descriptor
char phrase[30][30];//crea il buffer
pipe(fd); /* crea la pipe */
for(i=0;i<argc;i++)
{
if((pid=fork())==0)
{
strcpy(phrase[i], argv[i+1]);
printf("ho scritoo :'%s'\n",phrase);
close(fd[0]); /* chiude in lettura */
write(fd[1],phrase[i],strlen(phrase[i])+1); /* invia anche 0x00 */
close (fd[1]); // chiude in scrittura
// pid=0 -> figlio
usleep(50000*(1+i)); // Ritardo iniziale
printf("Figlio: %d\n",i+1); // Stampa messaggio del figlio
usleep(500000*(1+i)); // Ritardo finale
return(101+i); // Termina con codice di ritorno
} else {
printf("Ho generato il figlio %d con pid %d\n",i+1,pid);
char message[100]; //creare il buffer
memset(message,0,100);
int bytesread;
bytesread = read(fd[0],message,sizeof(message));
printf("ho letto dalla pipe %d bytes: '%s' \n",bytesread,message);
// close(fd[0]);
}
}
close(fd[0]); /* chiude in scrittura */
close(fd[1]); /* chiude in scrittura */
// Attende che dieci processi terminino
for(i=0;i<argc-1;i++)
{
int status;
wait(&status); // Attende termine di un figlio (uno qualunque)
printf("Terminato processo %d\n",WEXITSTATUS(status));
}
return 0;
}
我編輯我的代碼,並且我成功實現了N個子進程,其中父進程可以從孩子那裏讀取一個。問題是我希望父進程一次讀取所有進程的輸入。 – 2013-04-09 18:28:15
我的輸入是:./pipes CMD1 CMD2 CMD3我創建了PID 21552 的第一個孩子我寫道:「CMD1」 我從管道中讀取4個字節:「CMD1」 我創建的第二個孩子的pid 21553 我寫的:「CMD2」 我從管道讀4個字節:「CMD2」 我創建具有pid 21554 第三子我寫:「CMD3」 我從管道4字節讀:「CMD3」 子:1 子:2 子:3 結束進程101 結束進程102 結束進程103 – 2013-04-09 18:33:30