同机通信:
管道
XSI :消息队列,信号量数组,共享内存
不同机器间通信
socket 网络套接字
管道必须要凑齐读写双方
内核提供,单工,自同步机制
匿名管道:piepe(),磁盘上看不到文件,相当于直接给了我们一个文件描述符或者FILE* 。导致最直接的结果就是 :如果两个进程之间没有血缘关系,是不能用匿名管道进行通信的,因为另一个进程找不到文件位置。
命名管道:mkfifo(), 从磁盘上看到的文件类型为P 的文件。没有血缘关系的进程之间 可以用命名管道进行通信。本质上就是当前磁盘上存在的一个文件。P类型的文件
命名管道创建
NAME
mkfifo, mkfifoat - make a FIFO special file (a named pipe)
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
/*
指定我们所创建的命名管道的名字
指定操作权限
*/
int mkfifo(const char *pathname, mode_t mode);
RETURN VALUE
On success mkfifo() and mkfifoat() return 0. In the case of an error, -1 is returned (in which case, errno is set appropriately).