使用管道的典型程序 testpipe.c xlanchen@xlanchen-desktop:-gcc testpipe.c -o testpipe xlanchen@xlanchen-desktop:~./testpipe this is parent this is child this is s from parent 必管道只能在具有亲缘关系的进程之间进行通信 >通过fork传递管道的描述符 ”任意的两个进程不可能共享同一个管道 >无法打开已经存在的管道 嵌入式系统实验室 2023/7/14 Linux OS analysis 7139 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 FUOY OF U百TD
2023/7/14 Linux OS analysis 7/39 使用管道的典型程序 ❖testpipe.c ❖管道只能在具有亲缘关系的进程之间进行通信 ➢通过fork传递管道的描述符 ❖任意的两个进程不可能共享同一个管道 ➢无法打开已经存在的管道
FIFO 管道的一个重大限制是它没有名字,因此 只能用于具有亲缘关系的进程间通信,在 有名管道(named pipe或FIFO)提出后 该限制得到了克服。 FFO,有名管道 1958 >特殊的文件类型 1,严格遵循先入先出的读写规则 2,类似管道,在文件系统中不存在数据块,而是与一 块内核缓冲区相关联 3,有名字,FFO的名字包含在系统的目录树结构中, 可以按名访问 nce and 嵌入式系统实验室 2023/7/14 Linux OS analysis 8/39 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 FUOY OF U百TD
2023/7/14 Linux OS analysis 8/39 FIFO ❖管道的一个重大限制是它没有名字,因此 只能用于具有亲缘关系的进程间通信,在 有名管道(named pipe或FIFO)提出后, 该限制得到了克服。 ❖FIFO,有名管道 ➢特殊的文件类型: 1,严格遵循先入先出的读写规则 2,类似管道,在文件系统中不存在数据块,而是与一 块内核缓冲区相关联 3,有名字,FIFO的名字包含在系统的目录树结构中, 可以按名访问
FFO的操作: #include <sys/types.h> #include <sys/stat.h> int mkfifo (const char *pathname,mode_t mode); 以及:open,close,read,write等普通文件操作 aty of Science and Technolos 嵌入式系统实验室 2023/7/14 Linux OS analysis 9/39 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
2023/7/14 Linux OS analysis 9/39 ❖FIFO的操作: ❖以及:open,close,read,write等普通文件操作
FIFO举例 创建一个FIFO:createfifo.c 向FFO写:writefifo.c g从FIFO读:readfifo.c 大 1958 了 嵌入式系统实验室 2023/7/14 Linux OS analysis 10/39 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
2023/7/14 Linux OS analysis 10/39 FIFO举例 ❖创建一个FIFO:createfifo.c ❖向FIFO写:writefifo.c ❖从FIFO读:readfifo.c
createfifo.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <sys/types.h> 4 #include <sys/stat.h> 5 6int main(void) 7{ 8 umask (0); 9 if(mkfifo ("myfifo",S IRUSR IS IWUSRIS IRGRPIS IWGRP)) 10 11 perror("mkfifo error"); 12 exit(1); 13 } 14 return 0; 15} 16 嵌入式系统实验室 2023/7/14 Linux OS analysis 11139 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
2023/7/14 Linux OS analysis 11/39 createfifo.c