私が現在持っているコードは次のとおりです。
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
- 親から「ログインしました」と書き込みます。
これはちょっと奇妙です。私が望むのは、親で何かを読み取り、パイプに書き込んで、実際にその値で何かを行う必要がある子プロセスに送信することだけです。