进程间通信(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 <stdio.h>
#include <unistd.h>
#include <stdlib.h>

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:通过管道实现无亲缘关系进程间通信

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.管道机制(pipe) 1.Linux的fork操作 在计算机领域中,尤其是Unix及类Unix系统操作系统中,...
    Geeks_Liu阅读 9,087评论 1 9
  • 转载自:http://blog.csdn.net/hguisu/article/details/6122513原作...
    miaoiao阅读 5,437评论 0 7
  • Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。 内核、shell和文件系统一起形成了基本...
    请爱护小动物阅读 8,172评论 0 22
  • Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本...
    偷风筝的人_阅读 8,487评论 1 17
  • 空即是色 色即是空,心经里如是说。这似乎是一个很大的题目,今晚怎么想到IE写这个题目呢?刚刚还觉得今天没有什么可写...
    A00Helen阅读 1,553评论 0 0