首页
学习
活动
专区
工具
TVP
发布

Linux: linux 匿名管道

相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+123...行缓冲: 遇到换行符就输出(标准输出) 无缓冲: 没有缓冲区,数据会立即读入或者输出到外存文件和设备上(标准错误 因为python是默认采用带缓冲的fputs(参考py27源码: fileobject.c:...,则read返回0 如果所有管道对应的文件描述符被关闭,则write操作会产生信号SIGPIPE 当要写入的数据量不大于PIPE_BUF时,linux将保证写入的原子性。...当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。..., 写会收到SIGPIPE而默认退出, 管道结束 当我们杀掉读时, 写的程序并不会马上收到SIGPIPE, 相反的, 只有真正写入管道时才会触发这个错误 如果写入一个 读已经关闭的管道, 将会收到一个

33.9K41

Linux管道命令

1 什么是管道命令? 管道命令能够将一个命令的执行结果经过筛选,只保留我们需要的信息。...cut -d '分隔符' -f n 例子:显示环境变量PATH第1和6列的数据 echo $PATH | cut -d ':' -f 1,6 选择特定范围内的数据 cut -c 起始字符的下标-结束字符的下标...grep [-cinv] [--color=auto] '关键词' 待查找的文件名 -c:统计关键词出现的次数 -i:关键词忽略大小写 -n:输出行号 -v:反向选择,即查找不包含该关键词的行 --color...uniq [-参数] -i:忽略大小写 -c:进行重复行的统计 3.4.2 uniq使用方式 该命令只能用于管道,如统计当前系统所有用户的登录次数: last | cut -d ' ' -f 1 | uniq...-c 3.5 统计字数、行数、字符数:wc 3.5.1 wc命令介绍 wc [-参数] -l:列出行数 -w:列出字数 -m:列出字符数 3.5.2 wc使用方法 wc只能通过管道使用:命令 | wc

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

linux——管道详解

从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: 限制管道的大小。实际上,管道是一个固定大小的缓冲区。...使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,当这种情况发生时,随后对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够的空间供write()调用写。...2.管道的读写       管道实现的源代码在fs/pipe.c中,在pipe.c中有很多函数,其中有两个函数比较重要,即管道读函数pipe_read()和管道写函数pipe_wrtie()。...当所有的进程完成了管道操作之后,管道的索引节点被丢弃,而共享数据页也被释放。 因为管道的实现涉及很多文件的操作,因此,当读者学完有关文件系统的内容后来读pipe.c中的代码,你会觉得并不难理解。...]); //这里是子进程,先关闭管道的写入,然后在管道的读出读出数据 n= read(fd[0],line,100); write(STDOUT_FILENO

2.9K20

Linux进程通信——管道

最后一部就是让父进程关闭读,子进程关闭写,这样就能让父进程给子进程读取数据了。 一般而言,我们管道只能用来单项数据通信。 管道就是输送资源的,就是数据。...这里我们来实现一下父子进程之间的通信: 这里说一下:CXX,CPP,CC都是C++源文件的后缀。...首先来了解一下创建管道的函数; 这个函数的参数是一个输出型参数,储存的是读和写,比如说文件描述符中,3和4是在读和写,那么就把3和4储存到这个数组当中。...这说明如果管道没有数据了,读在读,默认会直接阻塞当前正在读取的进程,只有管道有数据,操作系统识别到,读才会去读取数据。 2. 管道是一个固定大小的缓冲区。...) << endl; return 0; } } void removeFifo(const string& path) { int n = unlink(path.c_str

3.9K70

Linux管道那些事儿

Linux下创建管道函数: int pipe(int pipefd[2]) 成功调用pipe函数之后,会返回两个打开的文件描述符,一个是管道的读取描述符pipefd[0],另一个是管道的写入描述符pipefd...管道有如下3个特性: 只有当所有的写入描述符都已关闭,且管道中的数据都被读出,对读取描述符调用read函数才会返回0(即读到EOF标志)。...如果所有读取描述符都已关闭,此时进程再次往管道里面写入数据,写操作会失败,errno被设置为EPIPE,同时内核会向写入进程发送一个SIGPIPE的信号。...当所有的读取和写入都关闭后,管道才能被销毁。 管道的本质是一片内存区域,默认大小是65536字节,不过可以调用fcntl来获取和修改这个值的大小。...因此在使用管道的过程中要注意写入数据是否能及时消费的问题,一旦管道满了,写入就会被阻塞;对于读取,要及时地读取,防止管道被写满,造成写入阻塞。

2.7K50

Linux进程通信 管道

--《Unix环境高级编程》 通俗理解: Linux管道通信,通讯方式正如其名一样,如同一个大管道,一流入,一流出。...半双工通信方式,即只能一流入另一流出;全双工通信方式,即一可以流入也可以流出。 PIPE PIPE是一种半双工管道,其中,fd[1]用来向管道写入数据,fd[0]用来从管道读出数据。...Code: //参考Linux man手册 #include #include #include #include <stdlib.h...在父子进程共享区,初始化pipe_fd后,即规定pipe_fd[0]为读取,pipe_fd[1]为写入。故pipe_fd必须在进程共享区初始化,也就能理解pipe存在开篇中第二个局限性的原因了。...FIFO为全双工通信,在一次通讯中,两可以同时收发数据。

3.1K10

聊聊 Linux 的匿名管道

相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+...行缓冲: 遇到换行符就输出(标准输出) 无缓冲: 没有缓冲区,数据会立即读入或者输出到外存文件和设备上(标准错误 因为python是默认采用带缓冲的fputs(参考py27源码: fileobject.c:...,则read返回0 如果所有管道对应的文件描述符被关闭,则write操作会产生信号SIGPIPE 当要写入的数据量不大于PIPE_BUF时,linux将保证写入的原子性。...当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。..., 写会收到SIGPIPE而默认退出, 管道结束 当我们杀掉读时, 写的程序并不会马上收到SIGPIPE, 相反的, 只有真正写入管道时才会触发这个错误 如果写入一个 读已经关闭的管道, 将会收到一个

2.6K20

Linux命名管道及函数

管道(pipe)应用的一大局限是没有名字,只能用于具有亲缘关系进程之间的通信。而命名管道,也称FIFO,实质是一种文件类型,通过FIFO可以用于任何两个进程间的通信。...命名管道的创建 命令方式 在shell中可以使用mkfifo命令创建一个命名管道,格式为: mkfifo [option] name 其中option选项用于选择创建FIFO的模式,使用形式为-m mode...编程示例 创建一个命名管道,create_FIFO.c: #include #include #include #include...此时再次执行: C$ ./create_FIFO testFIFO failed to mkfifo! : File exists 由于要创建的FIFO已经存在,再次创建会提示创建失败。...命名管道的读写 一般的文件I/O函数均可用于FIFO操作,如open、close、read、write等,若要删除一个命名管道,则使用系统调用unlink。

2.6K10

Linux内核编程--管道pipe

管道的定义: 管道是一种进程间通信机制,也是Linux操作系统中的一种文件形式。一个进程写入管道的数据可以被另一个进程读取。数据按先进先出顺序处理。Linux有两种形式的管道文件,管道和FIFO。...管道或FIFO都可以使用read/write函数访问,且读写操作都是按顺序发生的,从文件的开头读取并在末尾写入(先进先出机制)。管道或 FIFO 必须同时在读写的两打开。...管道的创建: 管道由pipe函数创建 #include int pipe(int fd[2]) --创建一个管道并将管道读写的文件描述符(分别)放入fd[0]和fd[1] --...) --成功运行后,向子进程返回0,并向父进程返回子进程的进程ID Demo1: 父进程关闭管道的读,只往写写入数据;子进程关闭管道的写,只从读读出数据 #include <sys/types.h...stream = fdopen(file, "r"); while ((c = fgetc(stream)) !

3.6K10

Linux - pipe() 管道的使用

初识 Pipe pipe , 中文翻译为管道,是 Unix/Linux 系统中一种比较常用的 IPC(Inter Process Communication) 。...随后,内核会返回管道的读和写的文件描述符,它们分别存放于参数数组的第 0 个元素和第 1 个元素。...管道有两,一为写,另一为读。如果一个进程试图往一个空的管道读取数据,那么该进程将会被堵塞,直至管道非空为止。.../exe child process read: hello world 管道闭环 如果子进程是负责读,而父进程负责写的话。那么子进程在读之前必须关闭管道的写,父进程同样地必须关闭管道的读。...参考 [^1] 44.2 Figure 44-2, The Linux Programming Interface [^2] 44.2 Figure 44-3, The Linux Programming

8.8K00

Linux 设置固定IP地址

当我们安装完linux之后需要做的第一件事就是配置网络,因为有了网络我们可以做更多的事,比如下载插件,使用xshell工具连接等等 ifconfig 查看网络配置,类似windows的ipconfig...linux的网络配置文件一般在/etc/sysconfig/network-scripts/下面,使用命令cd切换到该路径下 其中ifcfg-eth0就是虚拟机桥接的网络配置,如果有无线驱动...-16e9-41a1-bf59-325c6f601871 #网卡的UUID ONBOOT=no    #系统启动时是否自动加载该网卡yes/no NM_CONTROLLED=yes #network...DHCP接收IP地址前可指定主机名 # MASTER=bond0    #以太网接口被连接到这个接口 # SLAVE=yes    #这个设备是否由指定在MASTER字段中的频道绑定接口控制 如果要设置固定...ip,只需要设置如下配置: DEVICE=eth0 HWADDR=00:11:22:33:44:55 TYPE=Ethernet UUID=9420c638-16e9-41a1-bf59-325c6f601871

11.5K30

Linux进程通信——有名管道

管道(pipe)是无名管道,他是进程资源的一部分,随着进程的结束而消失。并且它只能在拥有公共祖先进程的进程内通信。而有名管道(FIFO)的出现则解决了这个问题。FIFO提供了一个路径名与它关联。...匿名管道和FIFO都不支持lseek函数对他们操作。Linux下建立有名管道的函数是mkfifo。...管道这个名字是非常形象的,一个管道必须有两(就是在一个进程中必须读,另一个进程必须写),只有这样,才能正常操作,否则进程将会阻塞。例如下面这样。...或者说,这也体现了进程的并发行,管子有了一以后,还必须有另一,这才能构成管道。 测试一下,FIFO用于两个无关进程直接的通信。首先建立我们有两个进程,一个是test1,另一个是test2....main() { int fd,ret; char str[10] = {"Hello"}; ret = mkfifo("fifo",0666); //test1.c中创建

2.7K30

Linux】进程间通信——管道

: 1.读快写慢 子进程休眠时,不在写入,父进程在读取(如果管道中没有数据,读在读,此时默认会直接阻塞当前正在读取的进程) 2.读慢写快 拿着管道不读,写一直在写:写管道里写,而管道是有大小的...,不断往写写,会被写满 管道固定大小的缓冲区,当管道被写满,就不能再写了。...此时写会阻塞。 如果父进程只是sleep(2),稍微睡眠比较少: 在这里不断读取的时候:写是把数据塞到管道里,管道读取的是按照指定大小读取!而不是一行一行。...3.写入关闭,读到0 子进程写入关闭: 4.读取关闭,写入 管道是单向的:读关闭,在写入就没有意义了:OS会终止写,会给写进程发送信号,终止写 管道特征 1.管道的生命周期随进程,进程退出...在comm.hpp中封装好删除的函数: void removeFifo(const std::string &path) { int n = unlink(path.c_str());

16040
领券