linux进阶35——有名管道

1. 概念

有名管道又称为FIFO文件,因为我们对有名管道的操作可以采用操作文件的方法,如使用open,read,write等。

与普通文件的区别:

  • 读取fifo文件的进程只能以"RDONLY"方式打开fifo文件;
  • 写fifo文件的进程只能以"WRONLY"方式打开fifo文件;
  • fifo文件里面的内容被读取后,就从管道中消失了。但是普通文件里面的内容读取后还存在;

2. 创建有名管道(fifo文件)

2.1 函数原型

#include <sys/stat.h>

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

2.2 返回值

成功返回0,失败返回-1

2.3 参数

pathname:要创建的fifo文件的名字(带路径)

mode_t:创建的fifo文件的访问权限

3. 删除有名管道(fifo文件)

3.1 函数原型

#include <unistd.h>

int unlink(const char *pathname);

3.2 返回值

成功返回0,失败返回-1

3.3 参数

pathname:要删除的fifo文件的名字(带路径)

4. 示例

FIFO用于两个无关进程直接的通信。首先创建两个进程send和recv。

process1.c

#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
    int fd,ret;
    char str[10] = {"Hello"};
    ret = mkfifo("fifo",0666);      //创建FIFO文件
    fd = open("fifo",O_WRONLY);     //只写方式打开
    write(fd,str,5);
    close(fd);

    return 0;
}

process2.c

#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    int fd;
    char str[10] = {0};
    fd = open("fifo",O_RDONLY);
    read(fd,str,5);
    printf("%s\n",str);
    close(fd);
    return 0;
}

编译运行:

[root@192 fifo]# gcc process1.c -o process1
[root@192 fifo]# gcc process2.c -o process2
[root@192 fifo]# ls
fifo  process1  process1.c  process2  process2.c
[root@192 fifo]# 

先运行process1,再运行process2,即可看到打印结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值