linux 管道 函数,Linux命名管道总结

管道是linux系统的一种进程间通信机制,它是一个只存在于内存的特殊文件,并且数据只能单向流动,而且只能用于具有亲缘关系的进程间(即父子进程,兄弟进程),无亲缘关系的进程是不能使用的。

命名管道可以解决管道的局限性,即他可以使任意两个进程之间通信。命名管道是一个存在于硬盘上的文件。

有两个函数可以创建命名管道:

int mknod(const char *path,mode_t mod,dev_t dev);

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

命名管道和管道的使用方法相同,只是使用命名管道时必须使用open()函数将其打开。

值得注意的是:调用open()打开命名管道的进程可能会被阻塞,但如果同时用读写方式(O_RDWR)打开,则一定不会阻塞,如果以只读方式打开,则一定会阻塞直到有写的进程打开管道,同样以写的方式打开的时候也会被阻塞,直到有读的进程打开管道。

创建一个命名管道:bool CGlobe::createPipe(const char *pipename)

{

struct stat buf;

if(access(pipename,F_OK)== 0)//判断文件是否存在

{

if(lstat(pipename,&buf) == 0)//获取文件状态信息

{

if(S_ISFIFO(buf.st_mode))//判断是否是FIFO文件

return true;

else if(unlink(pipename)<0)//删除文件

return false;

}

else

return false;

}

umask(0);

if( mknod(pipename,S_IFIFO|0666,0)== -1 )//创建FIFO文件

return false;

return true;

}

命名管道是有名有形的,为了使用这种管道Linux中设立了一个专门的特殊文件系统--管道文件,它存在于文件系统中,任何进程可以在任何时候通过命名管道的路径和文件来访问管道,但是在磁盘上的只是一个节点,而文件的数据则只存在于内存缓冲页面中与普通管道一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值