【发布时间】:2014-11-27 18:05:33
【问题描述】:
我编写了一个简短的 C 程序来学习 IPC 基础。该程序由一个尝试向管道写入两次的子进程和一个尝试读取两条消息的父进程组成。消息在text1 和text2 中。执行后,父进程只读取第一条消息。
子进程的输出如下:
I write text1 in pipe
I write text2 in pipe
父级通过管道从子级接收到的文本是:Hi Dady, I'm your child and text1!。
代码如下:
main(void){
int fd0[2], nbytes;
pid_t childpid;
ssize_t errorfi;
char text1[] = "Hi Dady, I'm your child and text1!\n";
char text2[] = "Hi Dady, I'm your child and text2!\n";
char readbuffer[80],msg[80];
pipe(fd0);
if((childpid = fork()) == -1)
{
perror("fork");
_exit(1);
}
if(childpid == 0)
{ //child process
close(fd0[0]);
fprintf (stderr, "I write text1 in pipe\n");
errorfi = (write(fd0[1], text1, (strlen(text1)+1)));
if (errorfi <0 )
{
fprintf (stderr, "errorfi = %d\n", errorfi);
fprintf (stderr, "error writting texto1 in fd0 pipe %s\n",strerror(errorfi));
_exit (EXIT_FAILURE);
}
fprintf (stderr, "I write text2 in pipe\n");
errorfi = (write(fd0[1], text2, (strlen(text2)+1)));
if (errorfi <0 )
{
fprintf (stderr, "errorfi = %d\n", errorfi);
fprintf (stderr, "error writting texto2 in fd0 pipe %s\n",strerror (errorfi));
_exit (EXIT_FAILURE);
}
_exit(0);
else
{ //parent process
close(fd0[1]);
nbytes = read(fd0[0], readbuffer, sizeof(readbuffer));
printf("text received in parent from child trough pipe:%s\n", readbuffer);
}
return(0);}
为什么我只看text1?
【问题讨论】: