匿名+有名管道

2024-02-25 10:52
文章标签 管道 有名 匿名

本文主要是介绍匿名+有名管道,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

管道

相关概念

4种情况
  1. 正常情况,如果管道没有数据读端陷入等待,直到有数据才能唤醒
  2. 正常情况,如果管道被写满写端陷入等待,直到有空间才能唤醒
  3. 写段关闭,读端一直读取,read返回0表示文件结束
  4. 读端关闭,写端一直写,OS会直接杀死进程
5种特性
  1. 匿名管道,允许有血缘关系的进程进行通信
  2. 匿名管道,默认给读写端提供同步机制
  3. 面向字节流
  4. 管道的生命周期随进程
  5. 半双工通信——单向通道
    (管道读取是将数据复制出来,允许读取过的数据进行覆盖)

匿名管道

#include <unistd.h>
int pipe(int fd[2]);

fd[0]表示读端, fd[1]表示写端
匿名管道的使用方式就是文件的使用方式
匿名管道是一个内存级的概念

请添加图片描述

有名管道

任意进程进行通信
磁盘级概念;在使用的时候会将磁盘数据加载进内存,每个进程创建一个struct_file,共用一份内存数据;不向磁盘刷新

文件打开必须是一个已经存在的文件,可以是一个绝对路径,也可以是相对路径

创建与删除
// 创建
mkfifo pipename // 命令行
int mkfifo(const char *filename,mode_t mode); // 函数// 删除
rm pipename // 命令行直接删除文件
int remove(const char *pathname); // 函数

有名管道的使用方式也是文件的使用方式

使用注意
        ssize_t n=read(fd,str,sizeof(str));if(n==0||n==-1){close(fd);// 管道那边创建那边卸载remove(pathname);exit(-1);}else{str[n]='\0'; // 一定要写printf("%s\n",str);}

一定要在每次读取的结尾加上\0,不写自身是没有\0这个符号的
读取是将字符读出,然后清空;但是底层实现是将文件指针指向开头位置重新写入

匿名管道读了就没了;有名管道读了之后只是将他拷贝的出去

匿名和有名的区别

匿名管道由pipe函数创建并打开
命名管道由mkfifo函数创建,打开用open
只有创建不同使用方法都和文件一样

这篇关于匿名+有名管道的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745248

相关文章

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

Redis 管道的神奇力量

今天我们要来探索一个 Redis 中非常强大且实用的特性——管道(Pipeline)。如果你想让你的 Redis 操作更加高效,那么这篇文章绝对值得一读。 一、Redis 管道是什么 Redis 管道是一种在客户端和服务器之间批量执行命令的技术。它允许客户端将多个命令一次性发送到服务器,而不是逐个发送并等待每个命令的响应。服务器会按照顺序执行这些命令,并将所有命令的响应一次性返回给客户端。

【JavaScript】方法属性的匿名函数是匿名函数么(附:获取当前执行函数名称的方法)

var ninja = {shout: function(){console.log("hello");}}   有些人可能认为,将匿名函数赋值给名为shout的属性也就相当于给它取了名字,其实这是不正确的理解。shout是属性的名称,而不是函数自身的名称。这一点可以通过检查函数的name属性来验证。 下面是一些测试实例,请自行思考(前两个均为匿名函数):

匿名对象-详解

在 C++ 中,匿名对象通常指的是那些在定义时没有名字的对象。这些对象的生命周期通常是临时的,它们在创建它们的表达式结束后很快就会被销毁。以下是一些 C++ 中匿名对象的例子: 1. **临时对象**:    临时对象是在表达式中创建的,没有名字的对象。它们通常用于函数返回对象时,或者在需要隐式转换时。    std::string getName() {return std::string(

【Linux】Linux 管道:进程间通信的利器

文章目录 Linux 管道:进程间通信的利器1. 什么是管道?2. 管道的分类2.1 匿名管道(Unnamed Pipe)2.2 命名管道(Named Pipe,FIFO) 3. 管道的局限性4. 结论 Linux 管道:进程间通信的利器 在 Linux 系统中,管道(Pipe)是进程间通信(IPC, Inter-Process Communication)的重要机制之一。

android kotlin复习 Anonymous function 匿名函数

1、还是先上个图,新建kt: 2、代码: package com.jstonesoft.myapplication.testfun main(){val count = "helloworld".count()println(count);println("------------------------")var count2 = "helloworld".count(){it ==

【上】java获取requestMapping上所有注解功能实现及取匿名注释类的值及 class com.sun.proxy.$Proxy140 转换出错

java获取requestMapping上所有注解功能实现及取匿名注释类的值及 class com.sun.proxy.$Proxy140 转换出错 1,多人相当然以为类似对象一样直接强转下就可以,结果迎来的是class com.sun.proxy.$Proxy140转换出错【想法很勇敢,现实很骨感】 //Class<A> operatorMappingAnnotationType// 错误

C++:Lambda表达式及匿名函数

C++Lambda表达式及匿名函数 1. 语法2. 语法3. 变量捕获 1. 语法 [ 捕获列表 ] ( 参数列表 ) -> 返回类型 { 函数体 } [OuterVar](int x, int y) -> int{return OuterVar + x + y;} 可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体。 忽略参数列表等价于指定一个空函数列表,

Linux管道式操作命令

Linux管道(Pipe)是一种将一个命令的输出作为另一个命令输入的技术。管道操作符是|。这种机制非常强大,因为它允许你将多个简单的命令组合成复杂的操作,实现数据的流式处理。 以下是一些常见的管道式操作命令的例子: 1. 查找特定进程 使用ps命令列出所有进程,然后用grep命令过滤出特定的进程。 ps aux | grep nginx 这个命令会列出所有与nginx相关的进程。 2

隐式类型转换/匿名对象的使用以及构造拷贝构造的优化

示例一: class A{private:int _n;public:A(int n){_n = n;cout << "A()" << endl;}A(const A& a){cout << "A(const A& a)" << endl;}~A(){cout << "~A()" << endl;}};void func(A a){} 对于func可以有如下三种调用 int mai