进程通信-管道
进程通信-管道
//让进程间相互影响,相互收发信息(全局变量不行)
//父子进程可以,两个不同程序的进程也可以
相关概念
管道:无名管道/有名管道
//名指路径名//有没有使用文件
管道文件fifo
单工,双工,半双工(收发一时其一)
无名管道
特点:
- 固定读写段,fd[0]读/fd[1]写,读端只能读/写端只能写
- 阻塞,进程没有写入,read会阻塞//无名管道内没有数据,管道堵塞,等待输入
- 只能用于有血缘关系的进程,即兄弟进程之间通信
//<unistd.h>
int pipe(int pipefd[2])
//无名管道创建
例:
//使用系统IO操作
int fd[2];
pipe(fd);//存入两个文件描述符
write/read;
close(fd[0]);//本质是文件描述符
close(fd[1]);
有名管道
特点:
- 有管道文件
- 只能在纯粹的linux环境下运行//在共享文件下会出现'找不到目录或文件'的报错
//linux的特殊文件都是这样//软连接,管道文件... - 有名管道通信时,必须使用同一个fifo文件
//新建有名管道文件//<sys/types.h><sys/stat.h>
int mkfifo(const char *pathname,most_t mode)
//mode: 掩码/一般设置为0777
//只是创建,没有判断能力
//使用前access下,看看有无文件
//<unistd.h>
int access(const char *pathname,int mode)
//mode: R_OK,W_OK,X_OK(可执行),F_OK(文件存在)
例:
int fd,ret;
ret=access("fifo",F_OK);
if(ret != 0)
mkfifo("fifo",0777);
fd=open("fifo",O_RDWR);
write/read;
close(fd);
两者区别/注意事项
两者区别
- 有名管道生成文件/无名管道不生成文件
- 有名只有一个文件描述符,可读可写/无名两个,针对性读写
注意事项
- 有名管道注意使用阻塞或信号,防止快速循环
- 文件描述符的使用,文件创建的位置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理