gpt4 book ai didi

c++ - fork n 个 child 并向他们发送一个单词

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:21 26 4
gpt4 key购买 nike

我有一个作业,我必须创建 n 个 child 。家长将向他们每个人发送一个单词。他们将修改它并打印它。我尝试为每个 child 创建管道,然后向每个 child 发送一个单词。但这是我的程序的输出:

1 child begins
2 child begins
1 child ends
3 child begins
4 child begins
2 child ends
5 child begins
3 child ends
4 child ends
5 child ends
End parent

这是我的程序:

int main()
{
ifstream f("in.txt");
int n=5;//n children
int p[n][2];

for(int i=0;i<n;i++)
if(pipe(p[i])<0){
perror("pipe error");
exit(1);
}

for(int i=0;i<n;i++)
{
pid_t pid=fork();
if(pid<0){
perror("fork error");
exit(1);
}
if(pid==0){//i child

for(int j=0;j<=i;j++)
close(p[j][1]);

char word[256];
int size;

cout<<i+1<<" child begins"<<endl;

while(read(p[i][0],&size,sizeof(int))>0){//first I get the size of the word
read(p[i][0],word,size*sizeof(char));//then the word
word[i%(size-1)] = '-';//make some changes to it
cout<<i+1<<"child "<<word<<endl;}

cout<<i+1<<" child ends"<<endl;
exit(0);
}
if(pid>0){
close(p[i][0]);
}
}
char word[100];
int size;
int j=0;

while(f>>word){
size=strlen(word);

write(p[j][1],&size,sizeof(int));
write(p[j][1],word,100);
j++;
}

for(int i=0;i<n;i++)
close(p[i][1]);

while(wait(NULL) > 0){};
cout<<"End parent"<<endl;
exit(0);
}

最佳答案

在您原来的帖子中,您错误地写入了父代码中管道的读取端。我看到您现在已经更改了这一点 - 相关行来自:

write(p[j][0],&size,sizeof(int));
write(p[j][0],word,100);

致:

write(p[j][1],&size,sizeof(int));
write(p[j][1],word,100);

此外,您的字长并没有真正做到正确的事情。我建议进行这些进一步的更改,以便在读取端出现的单词正确地以 null 终止并且没有尾随垃圾:

write(p[j][1],&size,sizeof(int));
write(p[j][1],word,size+1);

我能够重新创建您的原始问题,并使用这些更改测试了代码,它按照您的预期工作。

关于c++ - fork n 个 child 并向他们发送一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37962034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com