无名管道的创建|学习笔记

简介: 快速学习无名管道的创建

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频无名管道的创建 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11026


无名管道的创建

 

内容介绍

一、管道通信的前提

二、创建无名管道的方式

三、创建无名管道的过程

 

一、管道通信的前提

想要用管道通信的前提是:

创建管道,之后才可以通过管道通信号。

二、创建无名管道的方式

创建无名管道的方式:pipe函数

 

三、创建无名管道的过程

pipe函数的形参:int filedes[2](是一个数组的地址)

int filedes[2] 有两个元素,其中一个存读端,另一个存写端描述符。

filedes(0)为读而打开 filedes(1)为写而打开.返回值为整形。成功返回0;失败返回-1

filedes为int型数组的首地址,其存放了管道文件描述符filedes[0]、filedes[1]

一旦创建管道成功之后,filedes[0]内存放的文件名是将来读的。需要在管道内写数据时,通过filedes[1]

对“filedes[0]的输出是filedes[1]的输入”的解释:

image.gif会创建管道后,我们来写一个代码去使用管道进行通信。

image.png

首先看第一个代码:

父子进程通过管道实现数据的传输

#include ‹stdio.h>

#include (string. h›

#include ‹unistd.h

#include (stdlib.h

#include <svs/types.h

#include <sys/wait. h>

int main(int argc, char *argyl])

int fd pipe[2]:

char buf[] = "hello world";

pid t pid;

if (pipe (fd pipe) < 0)

perror ("pipe" ):

pid = forkO:

if (pid < 0)

perror(" fork" ):

exit(-1);

if (pid == 0)

write (fd pipe[1], buf, strlen(buf));

exit(0);

}

Else

{

wait (NULL):

memset(buf, 0, sizeof (buf)) ;

read (fd pipe(0], buf, sizeof (buf));

printf("but=[%s]\n", buf);

}

Reture0;

}

指定一个整型的数组,有两个元素,其中保存着两个管道的描述符。(创建管道的时候就可以得到两个管道描述符)

注意:

必须先pipe,之后将管道继承给子进程。

从fd pipe这个数组进来,一旦成功第0个存放读的描述符,第1个存放写的描述符。

Fork继承前两个数组,也继承了文件描述符

Fork创建子进程,在子进程中往管道中写数据,因为管道是一个文件。

写数据需要通过fd pipe[1]这个轨道。Buf指内存,strlen测长度

创建完子进程之后,副进程就在wait,等子进程将数据写入之后退出。退出后将buf全部变为0.

之后在读端读东西。之后去打印。如果可以打印出hello word,说明读取成功,无名通道创建成功。

以上就是用pipe数组创建管道。

相关文章
|
6月前
|
Shell
【进程通信】利用管道创建进程池(结合代码)
【进程通信】利用管道创建进程池(结合代码)
|
6月前
|
Linux
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
|
5月前
|
消息中间件 Linux 数据处理
Linux命令ipcrm详解:轻松管理IPC对象
`ipcrm`是Linux下用于删除IPC(进程间通信)对象的命令,如消息队列、共享内存和信号量。它通过指定对象ID或键值进行操作,如`-m ID`删除共享内存,`-q ID`删除消息队列,`-s ID`删除信号量。使用时需注意确认对象未被使用,以免影响系统运行。结合`ipcs`命令检查对象详情,并可定期清理不再需要的IPC对象以优化系统资源。
|
5月前
|
API 内存技术
无名管道&&有名管道详解代码
无名管道&&有名管道详解代码
|
6月前
|
负载均衡 Java Linux
管道,信号量,共享内存,socket的实际使用场景和NSPipe管道的使用
管道,信号量,共享内存,socket的实际使用场景和NSPipe管道的使用
90 0
|
11月前
|
消息中间件 Unix Linux
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)1
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)
453 0
|
11月前
|
存储 消息中间件 监控
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)2
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)
76 0
|
消息中间件 Unix Linux
进程间通信之管道(匿名管道与命名管道)
首先我们先提出一个问题:进程之间为什么无法直接通信,而需要操作系统提供通信方式: 经过我们上一个博客学习我们可以知道,每个进程都有独立的虚拟地址空间,一个进程在访问一个数据的时候都是通过地址来进行访问的,进过页表映射在之后访问物理内存,因此如果想要给另一个进程传递一个数据,就要把它的地址空间传递给其他进程,因为a进程的是虚拟地址,所以b进程经过页表映射也访问不了。(这个设计的初衷是:独立虚拟空间可以更稳定)
375 0
|
物联网 Linux 定位技术
无名管道的概念|学习笔记
快速学习无名管道的概念
无名管道的概念|学习笔记
|
物联网 Linux 开发者
无名管道读写特点|学习笔记
快速学习无名管道读写特点
无名管道读写特点|学习笔记