Linux之管道

管道

  • 管道
    • 什么是管道
    • 匿名管道
      • read
      • pipe
    • 应用
    • 有名管道
      • mkfifo
      • open
      • unlink
      • copy on write

管道

什么是管道

管道是Linux中最古老的进程间通信的方式
我们把一个进程连接到另一个进程的一个数据流称作 一个管道
注意:管道只能单向通信

你可以把他看做是一种特殊的文件,也能够进行,read,open等操作,但是他不属于任何文件系统,他只存在于内存之中

匿名管道

匿名管道,没有名字
父子进程之间,直接使用文件描述符号

1.创建描述符号,2个
int fds[2];
fds[0]用来读
ds[1]用来写

2.把文件描述符号变成管道
pipe

3.使用管道进行通信

4.关闭

read

在这里插入图片描述

读文件
头文件是 unistd.h
注意: 这里三个参数,第一个fd(管道,文件),第二个数组,第三个读取的大小

pipe

在这里插入图片描述

将int类型的数组 转换成管道 (创建管道)

在这里插入图片描述

头文件,仍然是unistd
write,将文件的内容写出来
第一个参数是fd(管道),第二个参数是(void *)类型的指针,第三个参数是指写的大小

应用

父进程读取数据,子进程写数据

#include<stdio.h>
#include<unistd.h>
#include<string.h>int main()
{int fd[2];pipe(fd);if(fork()){char temp[1024];int r;while(1){r = read(fd[0], temp, 1023);if(r > 0){temp[r] = 0; // /0 结束printf(">> %s\n", temp);}}}else{char temp[1024];while(1){memset(temp, 0, 1024);printf("you want to send ?");scanf("%s",temp);write(fd[1], temp, strlen(temp));}}close(fd[0]);close(fd[1]);return 0;
}

有名管道

有名字
> 可以在同一主机上不同进程之间操作, 用具体的文件

1.创建管道文件(mkfifo)
2.打开管道文件(open)
3.使用
4.关闭(close)
5.删除管道文件(unlink)
在这里插入图片描述

mkfifo

mkfifo,这个是用来创建有名管道的函数
在这里插入图片描述
返回值是int类型的
包含两个头文件
sys/types.h 以及 sys/stat.h

第一个参数是写文件的名称,第二个参数是写这个文件的权限
如果创建成功,返回0,创建失败返回-1

open

在这里插入图片描述

打开文件
头文件包括 sys/types.h, sys/stat.h. fcntl.h
第一个参数是文件名称,第二个参数打开方式

文件打开方式 常用选项是:O_RDONLY(只读);O_WRONLY(只写); O_RDWR(可读写); O_CREAT:
文件不存在时,创建该文件, 文件的权限由第三个参数mode决定最终的权限

注意:打开失败的话,返回-1,打开成功返回int

unlink

unlink ,系统调用函数,用来删除指定文件

在这里插入图片描述

头文件还是unistd.h
参数是文件名称

copy on write

写时拷贝,只有当你写的时候才拷贝,当你读的是时候不拷贝

案例

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>int main(){//1 创建管道文件(mkfifo)int r = mkfifo("test.pipe",0666);if(0 == r) printf("创建管道文件:%m\n");else printf("创建管道文件失败:%m\n"),exit(-1);//2 打开管道文件						int fd = open("test.pipe",O_WRONLY);if(-1 == fd) printf("打开管道文件失败:%m\n"),unlink("test.pipe"),exit(-1);printf("打开管道文件成功!\n");//3 使用管道文件 写	 int n = 0;char buff[56];while(1){memset(buff,0,56);sprintf(buff,"温柔了岁月:%d",++n);write(fd,buff,strlen(buff));sleep(1);}//4 关闭 	close(fd);						//5 删除管道文件unlink("test.pipe");}

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

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

相关文章

嵌入式Linux HID多指触控/触摸设备报表描述符

这里只做一下简单记录&#xff0c;更为详细的修改流程后续的文章再介绍。 报表描述符 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x04, // Usage (Touch Screen) 0xA1, 0x01, // Collection (Application) 0x85, 0x01, // Report ID (1) 0…

python 命令行界面的用户交互

背景 说一千&#xff0c;道一万&#xff0c;程序是为用户服务的&#xff0c;所以在程序运行过程&#xff0c;与用户交互以获取用户的信息输入和决策确认&#xff0c;是无法避免的编程需要考虑和解决的需求。 一个简单的demo 如下的程序中&#xff0c;程序需要生成一个新的 i…

[LeetCode] 2.两数相加

一、题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个…

FinalCutPro 移动项目的时候,遇到失去连接的文件怎么处理

FinalCutPro 移动项目的时候&#xff0c;遇到失去连接的文件怎么处理 有时候&#xff0c;FinalCutPro 项目在移动之后&#xff0c;一些链接到外面的文件会失去连接&#xff0c;文件虽然还在原有位置&#xff0c;但显示成下面这样&#xff1a; 解决方法 1. 点击菜单【文件】…

Web3时代:探索DAO的未来之路

Web3 的兴起不仅代表着技术进步&#xff0c;更是对人类协作、创新和价值塑造方式的一次重大思考。在 Web3 时代&#xff0c;社区不再仅仅是共同兴趣的聚集点&#xff0c;而变成了一个价值交流和创新的平台。 去中心化&#xff1a;超越技术的革命 去中心化不仅仅是 Web3 的技术…

华为OD机试 - 服务失效判断 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&a…

C++指针笔记

一.定义 是什么&#xff1f; 指针就是地址&#xff0c;相当于门牌号。通过 0x0000也可以拿到该地址里的数据&#xff0c; 可是如果每创建一个变量都要去记住地址编号不太方便我们使用数据&#xff0c;所以才有变量。作用&#xff1f; 通过指针(地址)间接访问内存。内存的编号…

CVE-2023-21839 weblogic rce漏洞复现

文章目录 一、漏洞影响版本二、漏洞验证三、启动反弹shell监听切换路径到jdk1.8 四、启动ldap服务五、使用CVE-2023-21839工具来进行攻击测试六、反弹shell 一、漏洞影响版本 CVE-2023-21839是Weblogic产品中的远程代码执行漏洞&#xff0c;由于Weblogic IIOP/T3协议存在缺陷&…

NeRF-SLAM部署运行(3060Ti)

记录在部署运行期间遇到的一些问题&#xff0c;分享给大家~ 一、环境 RTX 3060 Ti、8G显存、Ubuntu18.04 二、部署 1. 下载代码 git clone https://github.com/jrpowers/NeRF-SLAM.git --recurse-submodules git submodule update --init --recursive cd thirdparty/insta…

【网安AIGC专题11.1】论文12:理解和解释代码,GPT-3大型语言模型学生创建的代码解释比较+错误代码的解释(是否可以发现并改正)

Comparing Code Explanations Created by Students and Large Language Models 写在最前面总结思考 背景介绍编程教育—代码理解和解释技能培养编程教育—解决方案研究问题研究结果 相关工作Code ComprehensionPedagogical Benifis of code explanationLarge Language Models i…

vue3+element Plus实现弹框的拖拽、可点击底层页面功能

1、template部分 <el-dialog:modal"false"v-model"dialogVisible"title""width"30%"draggable:close-on-click-modal"false"class"message-dialog"> </el-dialog> 必须加的属性 modal:是否去掉遮罩层…