命名管道解决了管道的一个问题,它除了可以用在有亲缘关系的进程间,香港空间,也可用在无亲缘关系的进程间。它也仅仅解决了这个问题。
读写操作的特点:
1、同管道一样,美国空间,单向字节流;
2、open FIFO只读,服务器空间,若现有write端打开,则成功返回;否则,阻塞模式将一直阻塞到打开写,非阻塞模式正常返回;
3、open FIFO只写,若现有read端打开,则成功返回;否则,阻塞模式将一直阻塞到打开读,非阻塞模式正常返回;
4、对于空的FIFO,情形与空管道类似。
看一个例子:
server_fifo
client_fifo
main(int argc, const char **argv) 4 { 5if (argc != 2) {, stderr); 7 exit(EXIT_FAILURE); 8 } readfd, writefd;11char buf[MAX_BUF] = {0}, fn[30] = {0};((writefd = open(argv[1], O_WRONLY)) < 0)14 SYS_ERR();15pid_t pid = getpid();, pid);17if (mkfifo(fn, FILE_MODE) < 0 && errno != EEXIST)18 SYS_ERR();, pid);21int len = strlen(buf);22if (fgets(buf+len, MAX_BUF-len, stdin) == NULL) 23 exit(EXIT_FAILURE);24if (write(writefd, buf, strlen(buf)) < 0) 25 SYS_ERR();26if ((readfd = open(fn, O_RDONLY, 0)) < 0)27 SYS_ERR();28 unlink(fn);29int n;30while ((n = read(readfd, buf, MAX_BUF)) > 0)31buf[n] = 0, fputs(buf, stdout);32if (n < 0)33 SYS_ERR();34 exit(EXIT_SUCCESS);35 }
管道和FIFO的限制:
OPEN_MAX:一个进程任意时刻可以打开的最大文件描述字数;
PIPE_BUF:可原子的写往一个管道或FIFO的最大字节数。
1 $ ulimit -a
伟人之所以伟大,是因为他与别人共处逆境时,