Linux 下的进程间通信

一、管道(先进先出)
1、创建管道
   #include <unistd.h> int pipe(int filed[2])
   filed[0]是以读方式打开,filed[1]是以写方式打开
在同一个进程中使用管道是没有意义的,一般在创建管道后进程要调用fork,然后在父进程和子进程间进行通信。

管道中的数据容量是有限制的,/usr/include/linux/limits.h
PIPE_BUF = 4096
表明任一时刻管道中的数据量不能超过4096字节, 否则write会堵塞和直接返回0

例)

二、使用管道的基本套路
1、创建管道;
2、调用fork,创建子进程;
3、在子进程中把管道文件描述符复制到标准输入或输出文件号,并关闭多余的文件描述符;

   
4、子进程exec其他应用程序
5、父进程也关闭一个多余的管道文件描述符;
6、父子进程读写管道;
7、父进程等待子进程终止。

三、可以使用popen代劳二的工作
#include <stdio.h>
FILE * popen(const char * cmdstring, const char *type);

#include <stdio.h>
int pclose(FILE *fp);

四、流管道(全双工管道), 可惜linux系统不支持

五、FIFO(命名管道)
    两者之间的通信只要认可一个文件名既可,而不需要有集成关系
1、创建
   #include <sys/types.h>
   #include <sys/stat.h>
   int mkfifo(const char *pathname, mode_t mode);
2、打开
   fopen("filename", "mode");

 

例)

六、System V IPC
    消息队列、信号量、共享内存

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值