linux高级学习7

一.管道(续)

1.文件描述符

dup2函数用于复制文件描述符,与dup的区别为调用的形式区别
将newfd作为oldfd的副本

int dup2(int oldfd,int newfd);

2.无名管道

管道称为无名管道,其是一种特殊类型的文件,在应用层体现为两个打开的文件描述符,最古老的进程间通信方式(IPC)

管道的特点:

  • 半双工,数据在同一时刻只能在一个方向上流动
  • 其数据遵循先入先出的规则
  • 其传送的数据是没有格式的,其要求管道的读出方和写入方必须事先约定好数据的格式
  • 其只存在于内存中
  • 管道在内存中对应一个缓冲区,当写入的数据被读取,则会释放其数据的空间,用于写其他的数据
  • 管道没有名字,所有其只能使用有血缘关系的进程中
#include <unistd.h>
//创建管道
int pipe(int filedes[2]);
//关闭端口
close(fd[]); 

filedes数组中存放了管道的文件描述符fd[0],fd[1]
filedes[0]为读打开,filedes[1]为写而打开

3.有名管道(FIFO)

主要用于没有血缘关系的进程间通信,其是在物理内存中抽象出一部分内存规划为文件,用于进程间通信

特点:

  • 有名管道拥有无名管道的所有特点
  • FIFO在系统中作为特殊的文件存在,其没有文件大小永远都为0,内容则放置在内存中
  • 当使用有名管道的进程都退出后,其还会存在系统中,用于服务于其他进程
#include <sys/types.h>
#include <sys/stat.h>
//传入pathname文件名,文件的权限描述符,其由于相当于文件,使用用文件API进行操作
int mkfifo(const char *pathname,mode_t mode);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值