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 之前处理也是可以的, 但是这会增加
父进程的负担, 如果我们开个子进程来读取管道数据, 那么这个 "父进程就可以从脏活中解脱"
时间: 2024-10-11 04:23:42