有名管道和无名管道的基本特点和使用

管道的创建和判断是否存在

无名管道:int pipe( int fd[2] )
功能:创建无名管道 pipe
注意:pipe 拥有两个文件描述符,一个专用于读fd[0],一个专用于写fd[1]
创建出来的 pipe 的描述符,只能通过子进程继承的方式传递给别的进程,因此只能用于亲缘进程间的通信,其他非亲缘进程无法获取 pipe 的描述符。
不能有多个进程同时对 pipe 进行写操作,否则数据有可能被覆盖
总结: pipe 适用于一对一的、具有亲缘关系的进程间的通信。

	int ret;
	//定义数组存放无名管道产生的文件描述符,fd[0]为读端,fd[1]为写端
	int fd[2];
	//创建好一个无名管道
	ret=pipe(fd);
	if(ret==-1)
	{
		perror("创建无名管道失败!\n");
		return -1;
	}

有名管道 fifo :
特点:
1.任意多个进程之间都能通信(有无血缘关系都行)
2.有名管道不区分读写端,可以任意读写
3. 其他进程如果没有往有名管道中写入数据,那么read会阻塞当前进程(直到有进程往管道中写入数据,read才解除阻塞)
4.有名管道创建成功,会在你指定的路径下生成管道文件,无名管道没有管道文件(不能在共享文件夹中创建有名管道)

创建有名管道和判断是否存在操作:

int ret;
	int fd;
	//创建一个有名管道
	ret=mkfifo("/home/ubuntu/myfifo",0777);
	if(ret==-1)
	{
		//进一步分析错误的原因
		if(errno!=EEXIST) //失败的原因是管道文件已经存在
		{
			perror("创建有名管道失败!\n");
			return -1;
		}
	}
	//打开有名管道
	fd=open("/home/ubuntu/myfifo",O_RDWR);

法二:

if(access("/home/ubuntu/myfifo",F_OK))
{
    MKFIFO("/home/ubuntu/myfifo",0644);
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值