linux基础知识——IPC之管道

1.IPC

\qquadlinux环境下,进程的地址空间相互独立,每个进程都有各自不同的用户地址空间。任何一个进程的全局变量在另外一个进程中都看不到,所以进程之间不能直接互相访问,进程间要想交换数据只能通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制被称为进程间通信(IPC,interprocess communication)。
\qquad在进程间完成数据互换,需要借助操作系统提供的特殊方式,现在常用的有:管道(最简单)、信号(开销最小)、共享映射区(无血缘关系)、本地套接字(最稳定)

2.管道

\qquad管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,进行数据交换。其具有如下的特点:
\qquad管道本质是一种伪文件(实际是内核缓冲区)
\qquad由两个文件描述符引用,一个表示读端,一个表示写端
\qquad规定从管道的写端流入数据,从管道的读端流出数据
\qquad管道的原理:管道通过内核使用环形队列机制,借助内核缓冲区(4k)实现。

3.查看管道默认大小

ulimit -a

结果pipe size (512 bytes, -p) 8

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14488
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14488
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

\qquad 8*512b=4k
\quad管道的局限性:
\qquad数据不能自写自读
\qquad数据一旦被读走,便在管道中消失,不能反复读取
\qquad由于管道采用半双工通信方式,因此,数据只能在一个方向上流动。
\qquad只能在有公共祖先的进程间使用管道

4.管道交换数据的例子

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>int main()
{int fd[2];int ret;pid_t pid;ret = pipe(fd);if(ret==-1){perror("pipe error");exit(1);}pid = fork();if(pid==-1){perror("fork error");exit(1);}else if(pid==0){    //子进程close(fd[1]);char buf[1024];ret = read(fd[0],buf,sizeof(buf));//读到buf里面if(ret==0){printf("读取完成\n");}write(STDERR_FILENO,buf,ret);}else{close(fd[0]);write(fd[1],"hello world\n",strlen("hello world\n"));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

速度比晶体管快1000倍,新型单光子开关登上Nature

来源&#xff1a;机器之心作者&#xff1a;CHARLES Q. CHOI一种新型光学开关每秒钟的运行次数达到 1 万亿次&#xff0c;要比现在商用的顶级硅芯片快100到1000倍&#xff0c;这项研究未来或许可以催生出基于光而不是电的新一代计算机。在如今人们应用最为广泛的计算机架构中&am…

【计算机网络复习 数据链路层】3.4.1 流量控制与可靠传输机制

流量控制与可靠传输机制一、数据链路层的流量控制二、流量控制的方法三、可靠传输、滑动窗口、流量控制一、数据链路层的流量控制 较高的发送速度和较低的接收能力不匹配&#xff0c;会造成传输出错&#xff0c;因此流量控制也是数据链路层的一项重要工作。 数据链路层的流量…

linux的驱动开发——简单驱动程序编写

1.字符设备驱动介绍 \qquad字符设备驱动是linux驱动中&#xff0c;最基本的一类设备驱动&#xff0c;字符设备就是按照一个字节一个字节的方式进行读写操作的设备。读写数据分先后顺序&#xff0c;我们常见的单片机外设&#xff0c;比如led灯、按键、I2C、SPI、LCD等等都属于字…

【计算机网络复习 数据链路层】3.4.2 停止-等待协议

停止-等待协议一、停等协议1.1 无差错情况1.2 有差错控制1.4 停等协议性能分析一、停等协议 1、为什么要有停止-等待协议&#xff1f; 除了比特出差错&#xff0c;底层信道还会出现丢包问题。 丢包&#xff1a; 物理线路故障、设备故障、病毒攻击、路由信息错误等原因&#…

6G目前进展与未来展望

来源&#xff1a;6G俱乐部摘要&#xff1a;随着5G的大规模商用&#xff0c;6G研究也成为了移动通信行业新的研究热点。全球通信发达的国家和地区纷纷出台6G研发规划。面向2030年&#xff0c;如何定义6G&#xff0c;如何支撑6G突破现有技术的束缚&#xff0c;构建全新的能力体系…

一起玩儿物联网人工智能小车(ESP32)——14. 用ESP32的GPIO控制智能小车运动起来(二)

摘要&#xff1a;本文主要讲解如何使用Mixly实现对单一车轮的运动控制。 下面就该用程序控制我们的小车轮子转起来了。打开Mixly软件&#xff0c;然后单击顶部“文件”菜单中的“新建”功能&#xff0c;我们来开启一个新程序的开发工作。 我们的工作同样是先从最简单的开始&am…

linux系统常用命令详解

Linux命令格式&#xff1a;命令选项参数 &#xff08;大部分命令是这个格式&#xff09; 注意&#xff1a; 1.命令区分大小写 2.短选项可以合并 长选项不能合并 如 &#xff1a; 短选项 -l -h 可以合并为 -lh 长选项 不能合并 1. ls :列出文件信息&#xff0c;默认为当前目录下…

linux的驱动开发——内核模块的编译

1.编译内核模块的编译器 \qquad编译器&#xff1a;gcc 交叉编译器 2.编写编译内核模块的Makefile \qquad内部编译&#xff1a;内核模块的源文件放在内核源码中进行编译&#xff0c;需要修改内核中的kconfig&#xff0c;Makefile&#xff0c;make menuconfig \qquad静态编译&am…

【计算机网络复习 数据链路层】3.4.3 后退N帧协议(GBN)

后退N帧协议&#xff08;GBN&#xff09;一、后退N帧协议中的滑动窗口二、GBN发送方必须响应的三件事三、GBN接收方要做的事四、滑动窗口长度一、后退N帧协议中的滑动窗口 发送窗口&#xff1a;发送方维持一组连续的允许发送的帧的序号。 接收窗口&#xff1a;接收方维持一组连…

AI+Science 是人类两大科研范式的结合,工程化正当时

来源&#xff1a;ScienceAI编辑&#xff1a;ScienceAI近年来&#xff0c;人工智能&#xff08;AI&#xff09;快速发展&#xff0c;与此同时&#xff0c;越来越多的自然科学研究开始利用 AI 解决领域问题&#xff0c;比如助力药物研发、癌症疗法、材料发现&#xff0c;以及科研…

Docker 是一个开源的应用容器引擎

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 Docker中包括三个基本概念…

linux的驱动开发——内核模块如何使用?

1.内核模块的使用 \qquad查看内核模块的信息的命令&#xff1a; modinfo xxx.ko\qquad查看当前内核中已经插入的内核模块 lsmod\qquad将内核模块加载到内核中&#xff0c;和内核形成一个整体&#xff0c;运行 sudo insmod xxx.ko //加载函数会被调用\qquad查看内核日志信…

【计算机网络复习 数据链路层】3.4.4 选择重传协议(SR)

选择重传协议&#xff08;SR&#xff09;一、选择重传协议中的滑动窗口二、SR发送方必须响应的三件事三、SR接收方要做的事四、滑动窗口长度五、总结一、选择重传协议中的滑动窗口 二、SR发送方必须响应的三件事 1、上层的调用 从上层收到数据后&#xff0c;SR发送方检查下一…

FZU - 2103 Bin Jing in wonderland

FZU - 2103 Bin & Jing in wonderland 题目大意&#xff1a;有n个礼物&#xff0c;每次得到第i个礼物的概率是p[i]&#xff0c;一个人一共得到了k个礼物&#xff0c;然后按编号排序后挑选出r个编号最大的礼物。现在给出r个礼物的编号&#xff0c;问能得到这r个礼物的概率。…

登上Science子刊,神经科学再次启发DNN设计!中科院揭秘介观自组织反向传播机制...

来源&#xff1a;AI科技评论作者&#xff1a;张铁林&#xff0c;徐波论文标题&#xff1a;A Mesoscale Plasticity for Efficient AI Learning在人工智能领域&#xff0c;目前人工神经网络中被广泛使用的反向传播算法&#xff08;Backpropagation&#xff0c;BP&#xff09;采用…

【计算机网络复习 数据链路层】3.5.1 信道划分介质访问控制

信道划分介质访问控制一、传输数据使用的两种链路二、介质访问控制2.1 频分多路复用 FDM2.2 时分多路复用 TDM2.3 统计时分复用 STDM2.4 波分多路复用 WDM2.5 码分多路复用 CDM一、传输数据使用的两种链路 点对点链路&#xff1a;两个相邻节点通过一个链路相连&#xff0c;没有…

linux的驱动开发——字符设备驱动

1.字符设备驱动 \qquad字符设备驱动是最基本&#xff0c;最常用的设备。它将千差万别的硬件设备采用统一的接口封装起来&#xff0c;屏蔽了硬件的差异&#xff0c;简化了应用层的操作。 2.描述所有字符设备的结构体 \qquad描述所有字符设备的结构体在linux内核目录下的\includ…

Nature:初步探索限制饮食如何影响肿瘤生长

来源&#xff1a;生物通近年来&#xff0c;有一些证据表明&#xff0c;饮食干预有助于减缓肿瘤的生长。麻省理工学院的一项新研究分析了小鼠的两种不同饮食&#xff0c;揭示了这些饮食是如何影响癌细胞的&#xff0c;并为为什么限制卡路里可以减缓肿瘤生长提供了解释。该研究检…

爬虫基本库request使用—爬取猫眼电影信息

使用request库和正则表达式爬取猫眼电影信息。 1.爬取目标 猫眼电影TOP100的电影名称&#xff0c;时间&#xff0c;评分&#xff0c;等信息&#xff0c;将结果以文件存储。 2.准备工作 安装request库。 3.代码实现 1 import json2 import requests3 from requests.exceptions i…

【计算机网络复习 数据链路层】3.5.2 ALOHA协议

一、纯ALOHA协议 纯ALOHA协议思想&#xff1a; 不监听信道&#xff0c;不按时间槽发送&#xff0c;随机重发。想发就发。 二、时隙ALOHA协议 时隙ALOHA协议的思想&#xff1a; 把时间分成若干个相同的时间片&#xff0c;所有用户在时间片开始时刻同步接入网络信道&#xff0c…