命名管道(FIFO)

命名管道解决了管道的一个问题,它除了可以用在有亲缘关系的进程间,香港空间,也可用在无亲缘关系的进程间。它也仅仅解决了这个问题。

读写操作的特点:

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

伟人之所以伟大,是因为他与别人共处逆境时,

命名管道(FIFO)

相关文章:

你感兴趣的文章:

标签云: