TCP/IP网络编程 -- (十一)进程间通信

TCP/IP网络编程 -- (十一)进程间通信

进程间通信基本概念

因为两个进程间具有完全独立的内存空间,因此通信需要特殊的方式

通过管道实现进程间通信

image-20230316172326936

管道并非进程的资源,与 socket 类似是操作系统的资源(也就不是 fork 的复制对象),两个进程通过操作系统提供的内存空间通信

#include <unistd.h>

int pipe(int filedes[2]);

成功返回 0,失败返回 -1

filedes[0]:通过管道接收数据时使用的文件描述符,即管道出口

filedes[1]:通过管道传输数据时使用的文件描述符,即管道入口

int fds[2];
pipe(fds);
pid = fork();
char str[] = "hello";
if (pid == 0)
    write(fds[1], str, sizeof(str));
else
    read(fds[0], buf, BUF_SIZE);

image

通过管道进行进程间双向通信

image

但是要注意管道中的数据是无主数据,先读的会读取走,因此如果子进程给父进程发了数据,子进程比父进程先读,那么数据又会被子进程读走

一般不会用一个管道来进行双向通信,而是用两个管道

posted @ 2023-03-16 17:52  hzy0227  阅读(26)  评论(0编辑  收藏  举报