有名管道fifo
1.特点:
半双工
有名管道
在磁盘上有这样一个文件ls -l ->p
伪文件,在磁盘大小永远为0,数据实际上存放在内核中的缓冲区中
2.使用场景
无血缘关系的进程间通信(两个不相干的进程)
3.创建方式
1.命令:mkfifo 管道名
2.函数:int mkfifo(const char *pathname, mode_t mode);
4.fifo文件可以使用IO函数进程操作
open/close
read/write
不能执行lseek操作
5.进程间通信(伪代码)
[1]已经创建了fifo文件:myfifo
[2]两个不相干的进程A(read_fifo.c)和B(write_fifo.c)
read_fifo.c--->read
int fd=open("myfifo",O_RDONLY);
read(fd,buf,sizeof(buf));
close(fd);
write_fifo.c--->write
int fd=open("myfifo",O_WRONLY);
write(fd,"hello world",11);
close(fd);
fifo文件与普通文件的区别:
fifo文件默认是有"阻塞"属性的,而普通文件默认是不具有阻塞属性的
因此:fifo文件中没有写入数据时,当执行read_fifo.c去读取内容时,程序将会阻塞,等待数据的到来