当前位置: 技术问答>linux和unix
linux进程管道通信C语言编程:程序有问题,请指点迷津
来源: 互联网 发布时间:2016-02-17
本文导语: 以下为一道操作系统的实验题: 使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话: Child 1 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于...
以下为一道操作系统的实验题:
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
在下面编制的程序中,运行结果为:
fork child1 !
fork child2 !
parent!
Child 1 is sending a message!
跟预期的不同,少了一句 Child 2 is sending a message!,请高手指点迷津。个人初学Linux编程,对于write,pipe的运用也只是从网络上搜索得知,一度以为是字符串要连接后向管道输出,但改来改去始终没解决问题。过程中也出现了一些疑问,请指教:
1。下列程序是否实现了P1,P2的先后创建过程。
2。pipe()中的fields怎么和和buffer产生了联系。
2。write()缓冲区中的内容写入是在其后连接还是覆盖。
3。read()后,缓冲区的内容在程序结束前,一直存在吗?
#include
#include
#include
#include
int main(void)
{
pid_t pid1;
pid_t pid2;
int fields[2];
char buffer[80];
if ( pipe(fields) != 0 )
{
fprintf(stderr, "Create pipe error: %sna", strerror(errno));
exit(1);
}
if( (pid1 = fork() )
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
在下面编制的程序中,运行结果为:
fork child1 !
fork child2 !
parent!
Child 1 is sending a message!
跟预期的不同,少了一句 Child 2 is sending a message!,请高手指点迷津。个人初学Linux编程,对于write,pipe的运用也只是从网络上搜索得知,一度以为是字符串要连接后向管道输出,但改来改去始终没解决问题。过程中也出现了一些疑问,请指教:
1。下列程序是否实现了P1,P2的先后创建过程。
2。pipe()中的fields怎么和和buffer产生了联系。
2。write()缓冲区中的内容写入是在其后连接还是覆盖。
3。read()后,缓冲区的内容在程序结束前,一直存在吗?
#include
#include
#include
#include
int main(void)
{
pid_t pid1;
pid_t pid2;
int fields[2];
char buffer[80];
if ( pipe(fields) != 0 )
{
fprintf(stderr, "Create pipe error: %sna", strerror(errno));
exit(1);
}
if( (pid1 = fork() )