FIFO,命名管道。可以在不相关的进程间进行通信。FIFO是一种文件类型,下面为创建FIFO文件的函数
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
成功则返回0,否则返回-1.
打开关闭FIFO如同普通文件方法一样。应注意打开一个FIFO时,可选择非阻塞标志(O_NONBLOCK),默认为阻塞
1.阻塞情况下:只读打开会阻塞到有进程为写打开FIFO。为写打开FIFO会阻塞到有进程为读打开FIFO。
2.非阻塞情况下:只读打开会立即返回。只写打开时,如果没有进程为读打开次FIFO,则只写打开会报错返回,errno为ENXIO
产生SIGPIPE:写一个尚无进程为读打开的FIFO。
结束:FIFO最后一个写进程关闭FIFO,则该FIFO的读进程产生一个文件结束标志。要想避免产生文件结束标志,则可将以读-写方式打开FIFO。
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
成功则返回0,否则返回-1.
打开关闭FIFO如同普通文件方法一样。应注意打开一个FIFO时,可选择非阻塞标志(O_NONBLOCK),默认为阻塞
1.阻塞情况下:只读打开会阻塞到有进程为写打开FIFO。为写打开FIFO会阻塞到有进程为读打开FIFO。
2.非阻塞情况下:只读打开会立即返回。只写打开时,如果没有进程为读打开次FIFO,则只写打开会报错返回,errno为ENXIO
产生SIGPIPE:写一个尚无进程为读打开的FIFO。
结束:FIFO最后一个写进程关闭FIFO,则该FIFO的读进程产生一个文件结束标志。要想避免产生文件结束标志,则可将以读-写方式打开FIFO。
FIFO可以有多个写进程,为了避免各个进程所写的数据穿插,则应将一次写入FIFO的数据限制最大数据量为PIPE_BUF
服务器进程(读进程)
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h