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

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

开发者学堂课程【物联网开发- 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数组创建管道。

相关文章
|
存储 JSON 应用服务中间件
Higress的日志收集中,底层用的是Envoy,可不可以实现类似NGINX的rsyslog发送?
【2月更文挑战第30天】Higress的日志收集中,底层用的是Envoy,可不可以实现类似NGINX的rsyslog发送?
174 2
|
11月前
|
机器学习/深度学习 机器人
《解密奖励函数:引导智能体走向最优策略》
在强化学习中,奖励函数是核心要素,指导智能体学习与决策。它通过明确目标、合理分配奖励和考虑环境因素,激励智能体探索最优策略。设计恰当的奖励函数能让智能体在复杂环境中不断优化行为,实现长期目标。即时、延迟和全局奖励的不同类型,以及奖励函数的稳定性和适应性,都是设计时需关注的重点。
482 13
|
机器学习/深度学习 人工智能 自然语言处理
《C++与AMD ROCm:人工智能计算的强力引擎》
AMD ROCm平台是一个开放的、基于GPU的高性能计算平台,为人工智能计算提供卓越加速能力。结合C++这一高效编程语言,ROCm平台在深度学习、计算机视觉和自然语言处理等领域展现出巨大潜力。C++对底层硬件的精细控制与庞大的生态系统,使其在ROCm平台上实现更低延迟和更高吞吐量,适用于实时性要求高的任务。尽管面临编程复杂性和兼容性挑战,通过持续优化和技术支持,ROCm与C++的组合将在更多领域推动人工智能技术的实际应用,助力构建智能世界。
327 18
|
边缘计算 人工智能 安全
探索边缘计算:架构、优势及未来趋势
探索边缘计算:架构、优势及未来趋势
|
Unix Shell Linux
linux互斥锁(pthread_mutex)知识点总结
linux互斥锁(pthread_mutex)知识点总结
|
机器学习/深度学习 搜索推荐 数据挖掘
【深度解析】超越RMSE和MSE:揭秘更多机器学习模型性能指标,助你成为数据分析高手!
【8月更文挑战第17天】本文探讨机器学习模型评估中的关键性能指标。从均方误差(MSE)和均方根误差(RMSE)入手,这两种指标对较大预测偏差敏感,适用于回归任务。通过示例代码展示如何计算这些指标及其它如平均绝对误差(MAE)和决定系数(R²)。此外,文章还介绍了分类任务中的准确率、精确率、召回率和F1分数,并通过实例说明这些指标的计算方法。最后,强调根据应用场景选择合适的性能指标的重要性。
1590 0
|
算法 安全 调度
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(1)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
623 0
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(1)
|
分布式计算 资源调度 Hadoop
MapReduce分布式编程
MapReduce分布式编程
442 1
|
JSON API 数据格式
curl 使用:命令行中的 HTTP 客户端
`curl` 是命令行神器,用于与服务器交互,支持HTTP、HTTPS、FTP等协议。本文教你如何用它做POST请求(-d/--data)、GET请求(-G/-d)、JSON请求(-H &#39;Content-Type: application/json&#39;)和文件上传(-F)。学会这些,轻松测试API、自动化任务。现在就动手试试吧!
528 0
|
C++ 调度
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(2)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
563 0