【发布时间】:2015-11-17 14:31:52
【问题描述】:
我只想创建 2 个新的分叉(子进程),它们会依次命名。所以首先他们需要在管道中使用一些字符串来检查一些东西。我们来看代码:
char myname[] = "ALOAA";
int main ()
{
int fds[2];
pid_t pid;
pipe(fds);
pid = fork();
if(pid == 0)
{
strcpy(myname, "first");
}
else
{
pid = fork();
if(pid == 0)
{
strcpy(myname, "second");
}
}
if(strcmp(myname, "ALOAA") != 0)
{
char readbuffer[1025];
int i;
for (i = 0; i < 2 ; i++)
{
//printf("%s\n", myname);
close(fds[0]);
write(fds[1], myname, strlen(myname));
while(1)
{
close(fds[1]);
int n = read(fds[0], readbuffer, 1024);
readbuffer[n] = 0;
printf("%s-alihan\n", readbuffer);
if(readbuffer != myname)
break;
sleep(1);
}
//printf("%s\n", myname);
}
}
return 0;
}
所以第一个进程会将她的名字写入管道。之后,将检查管道中是否有任何新字符串。第二个也一样。但是我从 read() 函数中得到了空字符串。所以它会这样打印
-alihan
-alihan
我无法解决问题。
【问题讨论】:
-
"second"太长,无法存储在只有 6 个元素的myname中。您应该指定元素的数量,例如char myname[128] = "ALOAA"; -
我认为
read会失败,因为fds[0],这是read试图读取的内容,在读取之前已关闭。