首页 > 系统相关 >进程通信-管道

进程通信-管道

时间:2024-03-05 20:34:43浏览次数:22  
标签:文件 OK int 通信 fifo 管道 fd 进程

进程通信-管道

//让进程间相互影响,相互收发信息(全局变量不行)
//父子进程可以,两个不同程序的进程也可以


相关概念

管道:无名管道/有名管道
//名指路径名//有没有使用文件
管道文件fifo
单工,双工,半双工(收发一时其一)


无名管道

特点:

  1. 固定读写段,fd[0]读/fd[1]写,读端只能读/写端只能写
  2. 阻塞,进程没有写入,read会阻塞//无名管道内没有数据,管道堵塞,等待输入
  3. 只能用于有血缘关系的进程,即兄弟进程之间通信

//<unistd.h>
int pipe(int pipefd[2])
//无名管道创建

例:
//使用系统IO操作
int fd[2];
pipe(fd);//存入两个文件描述符
write/read;
close(fd[0]);//本质是文件描述符
close(fd[1]);


有名管道

特点:

  1. 有管道文件
  2. 只能在纯粹的linux环境下运行//在共享文件下会出现'找不到目录或文件'的报错
    //linux的特殊文件都是这样//软连接,管道文件...
  3. 有名管道通信时,必须使用同一个fifo文件

//新建有名管道文件//<sys/types.h><sys/stat.h>
int mkfifo(const char *pathname,most_t mode)
//mode: 掩码/一般设置为0777
//只是创建,没有判断能力
//使用前access下,看看有无文件

//<unistd.h>
int access(const char *pathname,int mode)
//mode: R_OK,W_OK,X_OK(可执行),F_OK(文件存在)

例:
int fd,ret;
ret=access("fifo",F_OK);
if(ret != 0)
    mkfifo("fifo",0777);

fd=open("fifo",O_RDWR);
write/read;
close(fd);

两者区别/注意事项

两者区别

  1. 有名管道生成文件/无名管道不生成文件
  2. 有名只有一个文件描述符,可读可写/无名两个,针对性读写

注意事项

  1. 有名管道注意使用阻塞或信号,防止快速循环
  2. 文件描述符的使用,文件创建的位置

标签:文件,OK,int,通信,fifo,管道,fd,进程
From: https://www.cnblogs.com/night000day/p/18053159

相关文章

  • .Net Core(七) 管道和中间件
    简介管道.NETCore中的管道是一个用于处理HTTP请求的组件。它是ASP.NETCore应用程序的核心部分,负责将传入的HTTP请求传递给适当的处理程序并生成响应。管道由一系列中间件组成,每个中间件都可以对请求或响应进行操作,然后将其传递给下一个中间件或终止请求处理。中间件......
  • Docker多容器和通信搭建(二)
    前言前面介绍了Docker容器的基础服务搭建,对于Docker容器来说一般都是多个容器项目运行在服务器上。所以这篇主要讲述多容器之间的交互,以及宿主与容器之间的交互问题。一、部署多容器接着以Nginx为例,部署多个Nginx容器进行测试。~]#dockerrun-d--namenginx-p80......
  • (续)signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) —— 强化学
    前文:signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library)——强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程编程模式(信号与槽机制)——python3.12版本下成功通过测试......
  • 在Docker中,docker run指令执行后,生成了哪些进程?
    当执行dockerrun指令后,Docker会启动一个新的容器实例。这个过程中会涉及多个进程和组件的交互。以下是dockerrun指令执行后生成的主要进程和组件:DockerDaemon(守护进程):DockerDaemon是Docker的后台服务,它长期运行并管理Docker容器、镜像、网络和卷等资源。当执......
  • 一文讲明白Java中线程与进程、并发与并行、同步与异步
    写在开头ok,everybody,在过去的两周内,我们大体上讲完了Java的集合,在最后我们探讨了关于HashMap线程不安全的原因,又提出了ConcurrentHashMap这个线程安全的集合解决方案,那么在接下来的2-3周内,我们就一起来学习一下Java中的并发多线程。在开始学习之前,我们必须要搞清楚几个概念:线程......
  • Qt 解决PLC与QModbusTcpClient通信自动断开
    项目场景:提示:这里简述项目相关背景:例如:项目场景:QModbusTcpClient通信问题描述提示:这里描述项目中遇到的问题:QModbusTcpClient连接后,稍微停一段时间,就会出现QModbusDevice::UnconnectedState原因分析:提示:这里填写问题的分析:1.网络原因2.服务器原因......
  • c#之asp.net的管道处理模式pipeline
    管道在进入管道之前首先要知道asp.netisApi所有的请求是由IIS转发给asp.netisApiHttpWorkerRequest监听asp.netisApi中的队列,HttpWorkerRequest是管道的执行入口 注册中间件的过程在响应请求的时候会触发事件,需要Config中配置以下是HtttpAplacation中的部分事件,在请求进......
  • C# 使用共享内存通信
    //SharedMemoryusing(MemoryMappedFilemmf=MemoryMappedFile.CreateOrOpen("sharedmem",500)){ objectobj=newObject(); ManualResetEventmyevent=newManualResetEvent(false); //写入线程每500ms发送一个消息,并发出一次event Threadth_writer=newThre......
  • 18_SPI通信协议
    SPI通信协议SPI介绍硬件电路未被选中的从机MISO线为高阻态移位示意图SPI时序基本单元MISO开始和结束为高阻态SPI时序发送指令指定地址写指定地址读......
  • Windows操作系统中的时间戳(Timestamp)是指用于标记事件发生时间的一种时间表示方式。在
    Windows操作系统中的时间戳(Timestamp)是指用于标记事件发生时间的一种时间表示方式。在计算机系统中,时间戳通常用来记录文件的创建时间、修改时间、访问时间等信息,也常用于网络通信中的认证和数据同步等场景。以下是Windows时间戳的基础技术原理:系统时钟:Windows操作系统通过系统......