下面是一段代碼,我目前有:叉和管道工作不順利,他們執行的同時
int main()
{
int pid, fd[2], i;
char comanda[1000], *var, vect[100][100], text[100];
if((pid = fork()) < 0)
{
perror("fork error");
exit(1);
}
if(pid){
printf("enter command: \n");
scanf("%[^\t\n]", comanda);
close(fd[0]);
close(0);
var = strtok(comanda, " ");
i=0;
while(var != NULL)
{
strcpy(vect[i], var);
var = strtok(NULL, " ");
i++;
}
if(strcmp(vect[0], "login") == 0)
{
write(fd[1], "login", 5);
printf("I got login");
}
close(fd[1]);
wait(NULL);
}
else
{
close(fd[0]);
int i=0;
read(fd[0], &text, sizeof(text));
printf("This is the child ");
exit(0);
}
return 0;
}
而預期輸出爲:
- 輸入命令:
- 我輸入命令這裏 -
- 他在管寫道
- 他寫道:「我被登錄」
- 他又在孩子和處理我的文字
輸出我得到的是一種奇怪:
- 「中輸入命令:」從父......然後
- 「這是孩子「從孩子?!?!?!來自哪裏?!?!
- 詢問輸入,scanf
- 從父級寫入「我已登錄」。
這是一種奇怪的,我要的是讀父的東西,在管道寫,並將其發送給子進程應該真正做到與價值的東西。
我相信你忘了創建一個管道。 – Art
剛剛關閉文件描述符時,您認爲在子進程「讀」中會發生什麼? –
我的愚蠢程度:99999.讓我們來看看它是否有效 – FinalDestiny