当前位置: 技术问答>linux和unix
跪求大虾指点...进程通信
来源: 互联网 发布时间:2016-11-29
本文导语: 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管...
使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息
#include
void main( )
{ int i, r, p1, p2, fd[2];
char buf[50], s[50];
pipe(fd); /* 父进程建立管道 */
while ((p1=fork())==-1); /* 创建子进程P1,失败时循环 */
if (p1==0) /* 由子进程P1返回,执行子进程P1 */
{ lockf(fd[1], 1, 0); /* 加锁锁定写入端 */
sprintf(buf, "Child process P1 is sending messages! n");
printf("Child process P1! n");
write(fd[1], buf, 50); /* 把buf中的50个字符写入管道 */
sleep(5); /* 睡眠5秒 */
lockf(fd[1], 0, 0); /* 释放管道写入端 */
exit(0); /* 关闭P1*/
}
else /* 从父进程返回,执行父进程 */
{ while ((p2=fork())==-1); /* 创建子进程P2,失败时循环 */
if (p2==0) /* 从子进程P2返回,执行子进程P2 */
{ lockf(fd[1], 1, 0); /* 锁定写入端 */
sprintf(buf, "Child process P2 is sending messages! n");
printf("Child process P2! n");
write(fd[1], buf, 50); /* 把buf中的字符写入管道 */
sleep(5); /* 睡眠5秒 */
lockf(fd[1], 0, 0); /* 释放管道写入端 */
exit(0); /* 关闭P2*/
}
wait(0);
if ((r=read(fd[0], s, 50))== -1) printf("cannot read pipe! n");
else printf("%s", s);
wait(0);
if ((r=read(fd[0], s, 50))== -1) printf("cannot read pipe! n");
else printf("%s", s);
exit(0);
}
}
结果是如下:
Child process P1!
Child process P1 is sending messages!
然后就一直等待,不会执行进程p2....不会结束....跪求大虾指点啊
#include
void main( )
{ int i, r, p1, p2, fd[2];
char buf[50], s[50];
pipe(fd); /* 父进程建立管道 */
while ((p1=fork())==-1); /* 创建子进程P1,失败时循环 */
if (p1==0) /* 由子进程P1返回,执行子进程P1 */
{ lockf(fd[1], 1, 0); /* 加锁锁定写入端 */
sprintf(buf, "Child process P1 is sending messages! n");
printf("Child process P1! n");
write(fd[1], buf, 50); /* 把buf中的50个字符写入管道 */
sleep(5); /* 睡眠5秒 */
lockf(fd[1], 0, 0); /* 释放管道写入端 */
exit(0); /* 关闭P1*/
}
else /* 从父进程返回,执行父进程 */
{ while ((p2=fork())==-1); /* 创建子进程P2,失败时循环 */
if (p2==0) /* 从子进程P2返回,执行子进程P2 */
{ lockf(fd[1], 1, 0); /* 锁定写入端 */
sprintf(buf, "Child process P2 is sending messages! n");
printf("Child process P2! n");
write(fd[1], buf, 50); /* 把buf中的字符写入管道 */
sleep(5); /* 睡眠5秒 */
lockf(fd[1], 0, 0); /* 释放管道写入端 */
exit(0); /* 关闭P2*/
}
wait(0);
if ((r=read(fd[0], s, 50))== -1) printf("cannot read pipe! n");
else printf("%s", s);
wait(0);
if ((r=read(fd[0], s, 50))== -1) printf("cannot read pipe! n");
else printf("%s", s);
exit(0);
}
}
结果是如下:
Child process P1!
Child process P1 is sending messages!
然后就一直等待,不会执行进程p2....不会结束....跪求大虾指点啊
|
哦 我用这个程序是可以的
输出
Child process P1!
Child process P2!
Child process P1 is sending messages!
Child process P2 is sending messages!
输出
Child process P1!
Child process P2!
Child process P1 is sending messages!
Child process P2 is sending messages!