[io]进程--进程间通信 -有名管道 函数、操作

特点:

1.使互不相关的两个进程互相通信

2.通过路径名来指出,并且在文件系统中可见,但内容存放在内存中

3.进程通过文件IO来操作有名管道

4.有名管道遵循先进先出原则

5.不支持lseek()操作

函数:

#include<sys/types.h>

#include<sys/stat.h>

int mkfifo (const char *filename,mode_t mode)

功能:

创建有名管道

参数:

filename:指向要创建的命名管道文件的路径名

mode:指定新创建的FIFO文件的权限位,类似于chmod

返回值:

成功:0

失败:-1;并设置errno号

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<errno.h>
int main
{
if(mkfifo("fifo",0666)<0)///创建有名管道
{
if(errno==EEXIST)//容错处理们。。
printf("file exist\n");
else
{perror("mkfifo err");return -1;}
}
printf("mkfifo success\n");
return 0;
}
#include<sys/stat.h>
#include<unistd.h>
int main
{
int a =mkfifo("myfifo",0666);
if(status==-1)
{perror("mkfifo failed");return -1;}
printf("FIFO created success\n");
return 0; 
}

补充:

1.当管道文件存在(报错提示 file exists)处理方式

判断errnoEEXIST只是打印提示语句并不退出程序

if(errno == EEXIST)

2.注意代码出现 errno需要添加头文件 #include <errno.h>

操作 

open 打开

int a=open("/path/to/fifo",O_WRONLY);//写入
int b=open("/path/to/fifo",O_RDONLY);//读取

写入数据

write(a,"hello shiny",10);

 读取数据+关闭

char buf[100];
read(a,buf,sizeof(buf));
printf("read:%s\n",buf);
//a是之前打开的FIFO文件描述符,而buf是一个缓冲区用于存储读取的数据

close(a);
//完成读写操作后,应该关闭FIFO以释放资源

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值