Linux内核入门(八)——进程间通信:有名管道

Linux内核入门(八)——进程间通信:有名管道

  • 前言
  • 有名管道
  • 进程间通信实验

前言

上回书说到,为了实现无亲缘关系进程之间通信,可以使用有名管道, 那么这个有名管道相比无名管道,有什么不同的地方呢?

使用有名管道是会在文件系统中创建一个管道文件的。
无名管道中可没有提到过文件这个东西。
既然有名管道是以文件的方式存在的,那么不同进程之间当然可以通过读写这个文件来实现进程间通讯。

注:Linux下有7种文件类型:

文件类型 创建方法
- 普通文件 open()
d 目录文件 mkdir()
l 链接文件(软链接) ln -s
p 命名管道文件 mkfifo()
s 套接字文件 还没学到
b 块设备文件,二进制文件 还没学到
c 字符设备文件 还没学到

前面几个我们都见过,ls -l命令就可以看到每个文件的类型,其中的 p 就代表我们要说的有名管道文件类型。

有名管道

首先:我们需要创建一个管道文件:

int mkfifo(const char *pathname, mode_t mode);

该函数就是用来创建一个管道,返回值-1代表创建失败,0代表创建成功;参数:pathname指明创建的管道文件目录和文件名,参数mode指明文件权限,和普通文件创建时一样,我们可以写:0777。
写一个创建管道文件的程序,运行后可以看到我们创建好的管道文件:
在这里插入图片描述
文件名为:npipe
到这里,内核空间此刻还没有有名管道存在,需要等到调用open()函数才会出现。

创建好管道文件后,我们就可以进行进程间通信实验了

进程间通信实验

实现简单的一个功能:进程1工作完成后,向有名管道写一个标志位,通知进程2开始工作。

进程1源码:

#include 

你可能感兴趣的:(内核,linux,多进程)