因此,代碼是這樣的一個:問題與管道和叉,那就只子進程一次,而每次我想
int main()
{
int pid, fd[2], i, j;
char comanda[1000], comm[100][100], *var, *var2, vect[100][100], text[1000], check[10000];
if(pipe(fd)<0)
{
perror("pipe error");
exit(1);
}
if((pid = fork()) < 0)
{
perror("fork error");
exit(1);
}
j = 0;
if(pid){
do {
if(j > 0) fgets (check , 1000 , stdin); //just in case there's still something in the buffer
printf("enter command: \n");
scanf("%[^\t\n]", comanda);
if(var = strtok(comanda, " "))
{
i=0;
while(var != NULL)
{
strcpy(vect[i], var);
var = strtok(NULL, " ");
i++;
}
}
else
strcpy(vect[0], comanda);
if(strcmp(vect[0], "login") == 0)
{
write(fd[1], "login ", 6);
write(fd[1], vect[1], strlen(vect[1]));
printf("I got login");
}
else if(strcmp(vect[0], "quit") == 0)
{
exit(1);
}
else
printf("I got the command %s \n", vect[0]);
j++;
} while(1);
close(fd[0]);
close(fd[1]);
wait(NULL);
}
else
{
close(fd[1]);
printf("copil? \n");
int i=0;
read(fd[0], text, sizeof(text));
var2 = strtok(text, " ");
j=0;
while(var2 != NULL)
{
strcpy(comm[j], var2);
var2 = strtok(NULL, " ");
j++;
}
if(strcmp(comm[0], "login") == 0)
{
//comanda e login, deci verificam username-ul.
if(login(comm[1]))
{
printf("OK, Logged IN! \n");
}
else
{
printf("Username not in /etc/passwd \n");
}
}
close(fd[0]);
exit(0);
}
return 0;
}
我想是從控制檯線,每次我讀命令得到一個已知的命令,去找孩子並執行它。現在它讀取命令罰款,登錄工作正常,但只有一次。之後,它仍然獲得登錄信息,它會打印出「我已登錄」,但它不會發送給孩子,並且如果沒有問題,請檢查它。
謝謝...但是,我如何應以什麼我需要努力糾正代碼的任何想法? – FinalDestiny
@FinalDestiny在我的答案中指出兩個,你應該循環在孩子中,就像你在父母中一樣。 –
好的,非常感謝你,會試試:) – FinalDestiny