有名管道的创建与读写

创建有名管道有两种方式:
一是在 shell 下交互地建立一个有名管道,二是在程序中使用系统函数建立有名管道。shell 方式下可使用 mknod 或 mkfifo 命令,下面命令使用 mknod 创建了一个有名管道:
mknod namepipe
创建有名管道的系统函数有两个:mknod() 和 mkfifo() 。两个函数均定义在头文件 sys/stat.h 中,函数原型如下:
引用
#include <sys/types.h>
#include <sys/stat.h>

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

函数 mknod() 参数中path 为创建的有名管道的全路径名;mod 为创建的有名管道的模式,指明其存取权限;dev 为设备值,该值取决于文件创建的种类,它只在创建设备文件时才会用到。这两个函数成功返回 0,失败则返回 -1。
通过查看相关头文件,可以看到  mode_t 是 unsigned int  类型
使用 mknod() 创建一个有名管道
引用
umask( 0);
if ( mknod ( "/tmp/fifo" ,  S_IFIFO |  0666 ,  0==  - 1{
       perror( "mknod error!");
       exit( 1);
}


使用 mkfifo() 创建有名管道,mkfifo() 前两个参数的含义和 mknod() 相同
引用
umask( 0);
if ( mkfifo ( "/tmp/fifo" ,  S_IFIFO |  0666 ,  0==  - 1{
       perror( "mkfifo error!");
       exit( 1);
}


“S_IFIFO | 0666" 指明创建一个有名管道且存取权限为 0666 ,即创建者、与创建者同组的用户、其他用户对该有名管道的访问权限都是可读可写。

有名管道创建后就可以使用了,有名管道的和管道的使用方法基本相同。只是使用有名管道时,必须先调用 open() 将其打开,因为有名管道是一个存在硬盘上的文件,而管道是存在内存中的特殊文件。

需要注意的是,调用 open() 打开有名管道的进程可能会被阻塞。但如果同时以读写方式 ( O_RDWR ) 打开,则一定不会导致阻塞;如果以只读方式 ( O_RDONLY ) 打开,则调用 open() 函数的进程将会被阻塞直到有写方打开管道;同样以写方式 ( O_WRONLY ) 打开也会阻塞直到有读方打开管道。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值