首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux】匿名管道实现简单进程池

一、匿名管道通信四种情况和五种特性 1.1、四种情况 管道内部没有数据且子进程不关闭自己写端文件fd,读端(父进程)就要阻塞等待,直到管道里有数据。...对于写端而言,如果写端不写了且关闭了写端fd,读端就会将管道数据读完,最后会读到返回值为0,表示读结束,类似于读到了文件结尾。...具有血缘关系进程进行通信,常见于父子。 管道是面向字节流。 父子进程退出,管道自动释放,因为内存中文件生命周期是随进程。  管道只能进行单向通信。...二、匿名管道实现简单进程池         这个进程池可以分配我们想要进程个数,用命令行方式来控制进程个数,任务由我们自己定好,每次随机选择一个任务指派给一个进程去完成,进程选派采用轮询方式按顺序指派...,这其中还有一些实现细节,会在代码中以注释方式给出。

9110
您找到你想要的搜索结果了吗?
是的
没有找到

Linux管道命令

Linux管道命令 管道命令(Pipe) 管道命令用"|"来表示,管道命令需要接收前一个命令输出来进行操作,但不能处理前一个命令错误....//选取界面:cut,grep cut -d '分隔字符' -f fields cut -c 字符范围 //用于排列整齐信息 cut -d ':' -f 3,5 //以:作为分隔 列出第3列和第...5列数据 //刚才cut是做切割,而grep是做分析 grep -a:将文件以text文件方式查找数据; -c:计算找到'查找字符串'次数 -v:反向输出 -n:输出时候带行号 //排序命令...:sort,wc,uniq sort -f:忽略大小写 -b:忽略空格 -r:反向输出 -M:以月份名字排序 -u:相同数据只显示一行 //uniq -i:忽略代销写字符不同 -c:进行计数 /...last | tr -d ':' //删除冒号 col: -x:将tab转换成对等空格键 -b:在文字内有反斜杠(/),保留反斜杠最后接字符

2.6K40

Linux: linux 匿名管道

相信很多在linux平台工作童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活将几种不同命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+123...管道定义 管道是由内核管理一个缓冲区,相当于我们放入内存中一个纸条。管道一端连接一个进程输出。这个进程会向管道中放入信息。管道另一端连接一个进程输入,这个进程取出被放入管道信息。...: PyFile_WriteString函数), 又因为标准输出被改写到管道, 所以将会采取全缓冲方式(shell 命令具体要看实现, 因为有些是用不带缓冲write实现,如果不带缓冲区,会直接写入管道...,则read返回0 如果所有管道读端对应文件描述符被关闭,则write操作会产生信号SIGPIPE 当要写入数据量不大于PIPE_BUF时,linux将保证写入原子性。...当要写入数据量大于PIPE_BUF时,linux将不再保证写入原子性。

33.9K41

Linux】命名管道创建方法&&基于命名管道两个进程通信实现

一、匿名管道和命名管道区别 匿名管道由pipe函数创建并打开。...命名管道由mkfifo函数创建,打开用open FIFO(命名管道)与pipe(匿名管道)之间唯一区别在它们创建与打开方式不同,一但这些工作完成之后,它们具有相同语义。...); pathname指创建出来管道路径和管道名,mode指创建出来管道权限,这里权限和文件权限是一样。...二、删除命名管道函数 #include // 返回值:成功返回0,出错返回-1 int unlink(const char *pathname); pathname指创建出来管道路径和管道名...三、利用命名管道实现两个进程之间简单通信  这个通信将实现写端发送信息读端接收信息。更多地实现细节会在代码中以注释方式给出。

9010

Linux管道命令

1 什么是管道命令? 管道命令能够将一个命令执行结果经过筛选,只保留我们需要信息。...如,/etc目录下会有大量文件,如果使用ls很难找到需要文件,因此可以使用管道命令将ls结果进行一次筛选,只保留需要信息。 2 管道 和 数据流重定向 区别?...管道一词非常生动形象,原始数据经过管道后,管道会将一部分不需要信息过滤掉,只保留用户所关注信息。 数据流重定向是指定数据在哪里显示,默认情况下会在屏幕显示,我们可以指定它输出到文件。...3 管道命令有哪些 3.1 选取指定列:cut cut为剪切意思,它能将一行行数据按照指定分隔符切成一列列,然后只显示特定列数据。...3.4 去除重复行:uniq 3.4.1 uniq命令介绍 uniq命令只能用于管道,它能够去除前一个命令执行结果中完全一样行。

4.4K70

linux——管道详解

有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建。 Linux管道实现机制 在Linux中,管道是一种使用非常频繁通信机制。...管道结构      在 Linux 中,管道实现并没有使用专门数据结构,而是借助了文件系统file结构和VFS索引节点inode。...当所有的进程完成了管道操作之后,管道索引节点被丢弃,而共享数据页也被释放。 因为管道实现涉及很多文件操作,因此,当读者学完有关文件系统内容后来读pipe.c中代码,你会觉得并不难理解。...实现与 Windows 相同管道创建目标,Linux 和 UNIX 使用下面的代码片段: 创建 Linux 命名管道 if(pipe(fd1)) { printf("pipe() FAILED:...Linux 还支持命名管道。对这些数字早期评论员建议我,为公平起见,应该比较 Linux 命名管道和 Windows 命名管道。我写了另一个在 Linux 上使用命名管道程序。

2.9K20

聊聊 Linux 匿名管道

相信很多在linux平台工作童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活将几种不同命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+...管道定义 管道是由内核管理一个缓冲区,相当于我们放入内存中一个纸条。管道一端连接一个进程输出。这个进程会向管道中放入信息。管道另一端连接一个进程输入,这个进程取出被放入管道信息。...: PyFile_WriteString函数), 又因为标准输出被改写到管道, 所以将会采取全缓冲方式(shell 命令具体要看实现, 因为有些是用不带缓冲write实现,如果不带缓冲区,会直接写入管道...,则read返回0 如果所有管道读端对应文件描述符被关闭,则write操作会产生信号SIGPIPE 当要写入数据量不大于PIPE_BUF时,linux将保证写入原子性。...当要写入数据量大于PIPE_BUF时,linux将不再保证写入原子性。

2.6K20

Linux好用管道命令

Linux好用管道命令 1. 选取命令 grep cut「分割」 2. 排序命令 sort wc uniq 3. 划分命令 split 4. 参数代换xargs 5....95 Linux 85 test 30 统计各行在文件中出现次数: $ sort testfile1 | uniq -c 3 Hello 95 3 Linux 85...-i 或者是-I,这得看linux支持了,将xargs每项名称,一般是一行一行赋值给 {},可以用 {} 代替。...9)直接修改文件内容(危险动作) sed可以直接修改文件内容,不必使用管道命令或数据流重导向! 不过,由于这个动作会直接修改到原始文件,所以请你千万不要随便拿系统配置来测试!...透过sed直接修改/取代功能,你甚至不需要使用 vim 去修订! 7. 参考 ❝https://www.runoob.com/linux/linux-command-manual.html ❞

9.2K20

Linux管道命令(二)

文件方法,这样就可以比较两个文件不同,本文将file1称为第一个文件,file2称为第二个文件。...如果要把x文件改成xx文件样子,diff给出建议是: 1d0:1表示第一个文件第1行,d(delete)表示删除,0表示第二个文件第0行(此行不存在),整个表示删除第一个文件第1行; 表示第二个文件,< aa结合1d0看,就是将第一个文件第1行删除,这一行内容为aa; 2a2,2表示第一个文件第2行,a(append)表示追加,2表示第二个文件第...2行,整个表示在第一个文件第2行后面追加第2个文件第2行; > a a:>表示第二个文件,结合2a2看,表示被追加第二个文件第二行是a a。...此外,还有2c3这种格式,它表示将第一个文件第2行改为(change)第二个文件第3行。

1.6K20

Linux管道命令(一)

Linux管道命令(一) 本文目录 1 cat 2 split 3 tac 4 rev 5 head, tail 6 cut cat cat程序将数据不加改变复制到标准输出,数据可以来自于标注输入...split默认将文件每1000行存为一个新文件,如果最后一次分割后剩余不足1000行,则将剩余行作为一个文件,也可以使用-l命令选项指定每个新文件行数: $ split -l 4 bk.txt 上面的命令将...split生成新文件默认名字为xaa、xab、xac……,使用-d选项指定使用数字作为新文件名后缀,默认是两位数字,还可以在文件名后面指定新文件文件名前缀: $ split -d -l 4 bk.txt...source 生成四个文件文件名为source00、source01、source02和source03。...使用-a选项指定数字或者字母后缀位数,下面的命令指定使用数字后缀且数字位数为3位: $ split -d -a 3 -l 4 bk.txt source_ 生成四个文件文件名依次是:source_

2.2K40

Linux 进程间通信:管道

Linux系统直接把管道实现成了一种文件系统,借助VFS给应用程序提供操作接口。 虽然实现形态上是文件,但是管道本身并不占用磁盘或者其他外部存储空间。在Linux实现上,它占用是内存空间。...所以,Linux管道就是一个操作方式为文件内存缓冲区。 管道分类和使用 Linux管道分两种类型: 匿名管道 命名管道 这两种管道也叫做有名或无名管道。...在这之后,Linux重新实现了一个管道缓存,并将它与写操作PIPEBUF实现成了不同概念,形成了一个默认长度为65536字节PIPESIZE,而PIPEBUF只影响相关读写操作原子性。...从Linux 2.6.35之后,在fcntl系统调用方法中实现了F_GETPIPE_SZ和F_SETPIPE_SZ操作,来分别查看当前管道容量和设置管道容量。...另外,作为一个程序员,即使我们了解了Linux管道实现,我们代码也不能依赖其特性,所以处理管道时该越界判断还是要判断,该错误检查还是要检查,这样代码才能更健壮。

8.2K21

Linux进程通信——管道

管道 进程通信概念 管道 匿名管道 创建匿名管道过程 管道读写特性 管道本身特征 基于管道进程池设计 命名管道 让两个无血缘关系进程通信 进程通信概念 什么是进程通信 首先我们清楚,进程是具有独立性...一般而言,我们管道只能用来单项数据通信。 管道就是输送资源,就是数据。 这里我们来实现一下父子进程之间通信: 这里说一下:CXX,CPP,CC都是C++源文件后缀。...这说明如果管道没有数据了,读端在读,默认会直接阻塞当前正在读取进程,只有管道有数据,操作系统识别到,读端才会去读取数据。 2. 管道是一个固定大小缓冲区。...管道本身特征 1.管道生命周期是进程生命周期 2.管道可以用来进行具有血缘关系进程之间进行通信,常用于父子通信。...基于管道进程池设计 思路: 这是用一个进程去控制多个进程,这个进程收到某个指令,然后发给这些进程其中之一,假如说要发1就是帮忙打印东西,2就是帮忙计算等等功能(具体功能不重要,这里不实现

3.9K70

Linux管道那些事儿

管道作用是在有亲缘关系进程之间传递消息,因为共同主先进程调用过pipe函数,打开管道文件就会在fork之后,被各个后代进程所共享,打开管道可以由其中一个进程写入数据,然后另一个具有亲属关系进程读取...另一方面管道又不是一种普通文件,它属于一种独特文件系统:pipefs。管道本质是内核维护了一块缓冲区与管道文件相关联,对管道文件操作,被内核转换成对这块缓冲区内存操作。...Linux下创建管道函数: int pipe(int pipefd[2]) 成功调用pipe函数之后,会返回两个打开文件描述符,一个是管道读取端描述符pipefd[0],另一个是管道写入端描述符pipefd...单向使用管道,也就是说,如果没有用到管道进程应该尽早释放管道文件fd,这么做不仅仅是为了让数据流向更加清晰,也不仅仅是为了节省文件描述符,更重要原因是:关闭未使用管道文件描述符对管道正确使用影响重大...由于存在实体文件,不相关没有亲缘关系进程也可以通过使用FIFO来实现进程之间通信。

2.7K50

Linux进程通信 管道

简介 管道是Unix系统IPC最古老形式,所有Unix系统都提供这种形式。管道有以下两种局限性: (1)历史上,通信方式为半双工。现在某些系统提供全双工管道。...--《Unix环境高级编程》 通俗理解: Linux管道通信,通讯方式正如其名一样,如同一个大管道,一端流入,一端流出。...即在父进程向管道写入终端输入 “HelloWorld”,然后在子进程读取管道数据,并在终端输出。...FIFO FIFO有时也会被称为命名管道,未命名管道(PIPE)只能在两个相关进程间使用,而且这个两个进程还要有共同创建了它们祖先进程。但是,通过FIFO,不相关进程也能进行数据交换。...总结 对比以上两种管道方式,可得出PIPE与FIFO大致差异。 工作方式。

3.1K10
领券