使用无名管道实现父子进程之间通信

简介: 使用无名管道实现父子进程之间通信

编写代码,创建父子进程,使用无名管道,实现父进程给子进程发送消息。

创建无名管道:

pipe函数可用于创建一个管道,以实现进程间的通信。

pipe函数的定义如下:

#include<unistd.h>
int pipe(int fd[2]);

pipe函数定义中的fd参数是一个大小为2的一个数组类型的指针。该函数成功时返回0,并将一对打开的文件描述符值填入fd参数指向的数组。失败时返回 -1并设置errno。

通过pipe函数创建的这两个文件描述符 fd[0] 和 fd[1] 分别构成管道的两端,往 fd[1] 写入的数据可以从 fd[0] 读出。并且 fd[1] 一端只能进行写操作,fd[0] 一端只能进行读操作,不能反过来使用。要实现双向数据传输,可以使用两个管道。

父进程通过write函数向fd[1]中写入消息,子进程通过read函数从fd[0]中读出消息并打印。

#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<unistd.h>

int main(){
  int fd[2];  
  if( pipe(fd) == -1 ){
    perror("管道创建失败");
  }
  pid_t pid = fork();
  if ( pid > 0 ){
    printf("input sth to children:\n");
    char s[256] = {0};
    gets(s);
    write(fd[1],s,strlen(s));
    wait(NULL);
  }
  else if( pid == 0){
    char buf[256];
    bzero(buf,256);
    read(fd[0],buf,256);
    printf("father say %s\n",buf);
  }
  else{
      printf("进程创建失败\n");
  }
  close(fd[0]);
  close(fd[1]);
  return 0;
}
相关文章
|
6天前
|
消息中间件 负载均衡 Linux
【linux】匿名管道|进程池
【linux】匿名管道|进程池
6 0
|
26天前
|
存储 安全 Python
进程通信 , 信号量 , 队列 , 管道 , 共享内存
进程通信 , 信号量 , 队列 , 管道 , 共享内存
|
2月前
|
消息中间件 Linux C语言
进程通信:管道与队列
进程通信:管道与队列
|
2月前
|
存储 安全 调度
【操作系统】进程控制与进程通信
【操作系统】进程控制与进程通信
29 3
|
2月前
|
存储 负载均衡 Linux
【Linux 系统】进程间通信(匿名管道 & 命名管道)-- 详解(下)
【Linux 系统】进程间通信(匿名管道 & 命名管道)-- 详解(下)
|
2月前
|
消息中间件 Unix Linux
【Linux 系统】进程间通信(匿名管道 & 命名管道)-- 详解(上)
【Linux 系统】进程间通信(匿名管道 & 命名管道)-- 详解(上)
|
1天前
|
缓存 Linux 调度
【linux】进程控制——进程创建,进程退出,进程等待
【linux】进程控制——进程创建,进程退出,进程等待
|
4天前
|
Web App开发 运维 监控
深入探索Linux命令pwdx:揭秘进程工作目录的秘密
`pwdx`命令在Linux中用于显示指定进程的工作目录,基于`/proc`文件系统获取实时信息。简单易用,如`pwdx 1234`显示PID为1234的进程目录。结合`ps`和`pgrep`等命令可扩展使用,如查看所有进程或特定进程(如Firefox)的目录。使用时注意权限、进程ID的有效性和与其他命令的配合。查阅`man pwdx`获取更多帮助。
|
4天前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器