码迷,mamicode.com
首页 > 系统相关 > 详细

TCP/IP 网络编程 (抄书笔记 4) -- 管道: 进程间通信

时间:2015-09-26 10:25:25      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

TCP/IP 网络编程 (抄书笔记 4) – 管道: 进程间通信

TCP/IP 网络编程 (抄书笔记 4) – 管道: 进程间通信

int fds[2];
pipe(fds);
write(fds[1], buf, strlen(buf));
read(fds[0], buf, BUF_SIZE);

如果两个进程的通信只是 单纯的一方写, 然后另一方读 的情况, 那么 我们的管道操作没有问题, 但是:

char str1[] = "str1";
char str2[] = "str2";
int fds[2];
pipe(fds);
...
if(pid == 0) {
        read(fds[0], buf1, BUF_SIZE);       // 这两个读请求会造成困扰, 时间先后的问题
        write(fds[1], str1, strlen(str1));
} else {
        write(fds[1], str2, strlen(str2));
        read(fds[0], buf2, BUF_SIZE);       // 这两个读请求会造成困扰, 时间先后的问题
}
解决: 创建 2 个管道进行通信

管道的好处

pid = fork();
if (pid == 0) {
    read(fds[0], buf, BUF_SIZE);
    ... do other things ...
} else {
    ...
    write(fds[1], buf, strlen(buf));
    ...
}

这样做的好处: 如果我们一开始的 "do other things" 放在父进程中 write 之前处理也是可以的, 但是这会增加
父进程的负担, 如果我们开个子进程来读取管道数据, 那么这个 "父进程就可以从脏活中解脱"

TCP/IP 网络编程 (抄书笔记 4) -- 管道: 进程间通信

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4840101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!