02 Linux进程间通讯

进程间通讯( IPC:Inter Processes Communication )

一. 管道(PIPE)

管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。 对于管道本身而言,不是普通的文件,不属于某个文件系统,其只存在于内存中;对于通讯而言,管道是半双工的通讯方式,数据在同一时刻只能在一个方向上流动;对于使用而言,管道没有名字,只能在具有公共祖先的进程之间使用。

1. 无名管道创建函数

#include <unistd.h>
//pipefd[0]为读;pipefd[1]为写
int pipe(int pipefd[2]);

2. 设置管道非阻塞

读端设置为非阻塞,写端没有关闭,没有数据时直接返回-1。

//获取原来的flags
int flags = fcntl(fd[0], F_GETFL);
// 设置新的flags
flags |= O_NONBLOCK;
// flags = flags | O_NONBLOCK;
fcntl(fd[0], F_SETFL, flags);

3. 管道缓冲区

管道在内存中对应一个缓冲区,不同的系统其大小不一定相同。 可以通过ulimit -a 命令来查看当前系统中创建文件所对应的内核缓冲区的大小,Ubuntu 14 下为4k。

通过函数查看:

#include <unistd.h>

long fpathconf(int fd, int name);
功能:该函数可以通过name参数查看不同的属性值
参数:
    fd:文件描述符
    name:
        _PC_PIPE_BUF,查看管道缓冲区大小
        _PC_NAME_MAX,文件名字字节数的上限
返回值:
    成功:根据name返回的值的意义也不同。
    失败: -1

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值