进程间通信方式(IPC)和管道
进程间通信方式
进程间之所以可以进行通信,是应为都在内核区,缓冲区的大小一般为4096字节
管道
管道使用函数
/*************************************************************************
> File Name: pipe_test.c
> Author: shaozheming
> Mail: 957510530@qq.com
> Created Time: 2022年02月27日 星期日 11时19分51秒
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
void sys_err(const char *str)
{
perror(str);
exit(1);
}
int main(int argc, char* argv[])
{
int fd[2];
int ret;
pid_t pid;
char *str = "hello pipe!\r\n";
char buf[1024];
ret = pipe(fd); //创建管道,一个读端一个写端 fd[0]是读,fd[1]是写
if(ret == -1){
sys_err("pipe error\r\n");
}
pid = fork();
if(pid > 0){
//父进程
close(fd[0]); //关闭读端,也就是写
write(fd[1], str, strlen(str));
close(fd[1]); //关闭读端,也就是写
}else if(pid == 0){
//子进程
close(fd[1]); //关闭写端,也就是读
sleep(1);
ret = read(fd[0], buf, sizeof(buf));
write(STDOUT_FILENO, buf, ret);
close(fd[0]);
}else {
sys_err("pid error\r\n");
}
return 0;
}
管道读写行为
使用管道实现ls | wc-l
此命令是实现ls出来的文件的行数或个数
/*************************************************************************
> File Name: pipe_test.c
> Author: shaozheming
> Mail: 957510530@qq.com
> Created Time: 2022年02月27日 星期日 11时19分51秒
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
void sys_err(const char *str)
{
perror(str);
exit(1);
}
int main(int argc, char* argv[])
{
int fd[2];
int ret;
pid_t pid;
ret = pipe(fd); //创建管道,一个读端一个写端 fd[0]是读,fd[1]是写
if(ret == -1){
sys_err("pipe error\r\n");
}
pid = fork();
if(pid > 0){ //父进程
close(fd[0]); //关闭读端,也就是写
dup2(fd[1], STDOUT_FILENO); //将标准输出指向写端
execlp("ls", "ls", NULL);
// close(fd[1]); 不能close,execlp之后就不会回来了
}else if(pid == 0){ //子进程
close(fd[1]); //关闭写端,也就是读
dup2(fd[0], STDIN_FILENO);
execlp("wc", "wc", "-l", NULL);
}else {
sys_err("pid error\r\n");
}
return 0;
}
管道总结
命名管道fifo
文件通信
使用文件也可以进行IPC通信,不过已经过时了
主要是给自己看的,所以肯定会出现很多错误哈哈哈哈哈
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本