0
こんにちは私は私のCプログラムにいくつかの問題があります。目標はfork
に2回あり、pipe
のデータを子2から子1に渡してから、子1から親にいくつかの異なるデータを渡し、最終的に親に印刷します。ここに私のコードは次のとおりです。cフォークパイプと読み取りfuncntionはファイル記述子からランダムなバイトを与えます
int main(void)
{
int f,f2,nread;
int pfd[2], pfd2[2];
char buffer[512], *str;
if(pipe(pfd)==-1) {
errorHandler("pipe");
}
if((f=fork())==-1) {
errorHandler("fork 1");
} else if(f == 0) {
/*child 1*/
if(pipe(pfd2)==-1) {
errorHandler("pipe 2");
}
if((f2=fork())==-1) {
errorHandler("fork 2");
} else if(f2 == 0) {
/*child 2*/
close(pfd[0]);
close(pfd[1]);
close(pfd2[0]);
str = "rollin";
printf("-child 2 writing: %s\n", str);
if(write(pfd2[1], &str, BUFFSIZE)==-1) {
errorHandler("write 2");
}
} else {
/*child 1*/
close(pfd[0]);
close(pfd2[1]);
if((nread=read(pfd2[0], &buffer, 512))==-1) {
errorHandler("read child 1");
}
buffer[nread] = 0;
printf("child 1 read data %d [%s]\n", nread, buffer);
str = "patrollin patrolling hehe";
printf("-child 1 writing %s\n", str);
if(write(pfd[1], &str, BUFFSIZE)==-1) {
errorHandler("write");
}
}
} else {
/*parent*/
close(pfd[1]);
if((nread=read(pfd[0], buffer, sizeof(buffer)))==-1) {
errorHandler("read");
} else {
buffer[nread] = 0;
printf("parent read data: %d [%s]\n", nread, buffer);
}
}
return 0;
}
出力は、データが読み込まれていることである(私は指定された512バイトとして)それは私が送信したものではありません。私は代わりにメモリからいくつかのランダムな兆候を取る(ファイルディスクリプタは適切にpasseedされていますか?)。 私がここに来た理由は、これに何が間違っているのか分かりません。私は1つのフォークと同様のアクションを持つプログラムを持っており、それは同じテクニックに基づいており、動作しています。誰かが私に何か間違っていることをヒントを与えることができますか?