进程间通信(3)-有名管道

正由于这无名管道的缺点,对无名管道进行改进:有名管道。
所谓的有名,即文件系统中存在这个一样文件节点,每一个文件节点都有一个inode号
而且这是一个特殊的文件类型:p管道类型。

  1. 创建这个文件节点,不可以通过open 函数,open 函数只能创建普通文件,不能创建特殊文件(管道-mkdifo,套接字-socket,字符设备文件-mknod,块设备文件-mknod,符号链接文件-ln –s,目录文件mkdir)

  2. 管道文件只有inode号,不占磁盘块空间,和套接字、字符设备文件、块设备文件一样。普通文件、符号链接文件及目录文件,不仅有inode号,还占磁盘块空间。

  3. mkfifo 用来创建管道文件的节点,没有在内核中创建管道。
    只有通过open 函数打开这个文件时才会在内核空间创建管道。

int mkfifo(const char *filename, mode_t mode);
   功能:创建管道文件
   参数:管道文件文件名,权限。
   创建的文件权限仍然和掩码umask有关系。
   返回值:创建成功返回0,创建失败返回-1。

例1:mkfifo的用法。

#include 
#include 
#include 

int main()
{
    int ret;
    ret = mkfifo("./myfifo", 0777);
    if(ret < 0)
    {
        printf("create myfifo fail\n");
        return -1;
    }
    printf("create myfifo success\n");

    return 0;
}
创建管道文件成功,而且管道文件不占磁盘块空间
代码中权限是777,但是被umask掩掉了,因此是775

例2:通过管道实现无亲缘关系进程间通信

你可能感兴趣的:(进程间通信(3)-有名管道)