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

Linux: linux 匿名管道

相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+123...这就要涉及到文件IO的缓冲方式了,关于文件IO, 可以参考我的另一篇文章: 浅谈文件描述符1和2, 在最下面的地方提到文件IO的三种缓冲方式: 全缓冲: 直到缓冲区被填满,才调用系统I/O函数, (一般是针对文件...当管道满的时候 O_NONBLOCK (未设置): write调用阻塞,直到有进程读走数据 O_NONBLOCK ( 设置 ):调用返回-1,errno值为EAGAIN 如果所有管道写端对应的文件描述符被关闭...,则read返回0 如果所有管道读端对应的文件描述符被关闭,则write操作会产生信号SIGPIPE 当要写入的数据量不大于PIPE_BUF时,linux将保证写入的原子性。...当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。

33.3K41

Linux管道命令

1 什么是管道命令? 管道命令能够将一个命令的执行结果经过筛选,只保留我们需要的信息。...如,/etc目录下会有大量的文件,如果使用ls很难找到需要的文件,因此可以使用管道命令将ls的结果进行一次筛选,只保留需要的信息。 2 管道 和 数据流重定向 的区别?...管道一词非常生动形象,原始数据经过管道后,管道会将一部分不需要的信息过滤掉,只保留用户所关注的信息。 数据流重定向是指定数据在哪里显示,默认情况下会在屏幕显示,我们可以指定它输出到文件。...=auto:关键词高亮 3.2.2 grep的两种使用方式 3.2.2.1 方式1:grep [-参数] ‘关键词’ 文件 这种方式并没有用到管道,只是从指定文件中将符合关键词的行搜索出来。...3.3.2.1 方式1:sort [-参数] 文件文件中的数据按照指定字段排序。 3.3.2.2 方式2:命令 | sort [-参数] 使用管道,将前一个命令执行的结果按照指定字段进行排序。

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

linux——管道详解

有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建。 Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制。...从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: 限制管道的大小。实际上,管道是一个固定大小的缓冲区。...在Linux中,该缓冲区的大小为1页,即4K字节,使得它的大小不象文件那样不加检验地增长。...管道的结构      在 Linux 中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。...Linux 还支持命名管道。对这些数字的早期评论员建议我,为公平起见,应该比较 Linux 的命名管道和 Windows 的命名管道。我写了另一个在 Linux 上使用命名管道的程序。

2.8K20

Linux文件目录常用操作、重定向与管道

文件目录常用操作 1、查找文件 (1)find命令 格式:find 目录名 条件 常见条件: -name指定要被寻找的文件或者目录的名称(可用通配符) -type x以文件类型作为寻找条件(x代指文件类型.../home/jcy整体磁盘占用率 4、文件分割----split命令 格式:split [-bl] 文件前缀 -b 设定分割完成后的文件大小 -l 以行数进行分割 -a 指明后缀长度 重定向与管道 1、...错误与正确文件输出到同一个文件中,则必须以上面的方法来写!不能写成其它格式!...2、管道(|) (1)管道符代表将一个命令的输出作为另一个命令的输入; 例: ps –ef > temp.out grep prthon temp.out 可合并为: ps –ef | grep...temp.out (2)管道符可以多次传递 例:ps –ef | grep python |grep –v gre

1.4K90

Linux文件重定向和管道的效率对比

作者:Yu Feng 链接:http://blog.yufeng.info/archives/1981 # 命令1,管道导入 shell> cat huge_dump.sql | mysql -uroot...好了,场景齐全了,我们接着来比较下二种情况下的速度,第一种管道: # 第一种管道方式 $ time (cat huge_dump.sql|....> sys_close 0 bash(26570): -> sys_wait4 0 bash(26570): -> sys_write stap在收集数据了,我们在另外一个窗口运行管道的情况...然后把文件句柄搞到0句柄上,这个进程execve运行b.out。 然后b.out直接读取数据。...现在就非常清楚为什么二种场景速度有3倍的差别: 命令1,管道方式: 读二次,写一次,外加一个进程上下文切换。 命令2,重定向方式:只读一次。 结论:Linux下大文件重定向效率更高。

1.5K10

Linux进程通信——管道

父进程往文件的缓冲区写数据,子进程从缓冲区读数据,这个就是进程之前的通信,这个方法及操作系统提供的内核文件,称为管道文件。(管道本质上就是文件) 那么需不需要将文件缓冲区的内容经过磁盘呢?...所以这里说的管道其实是内存级文件,他不关心在磁盘的哪个路径下,要不要被写到磁盘,只要创建对象和缓冲区然后将地址添加到对应的文件描述符表就可以了。到时候操作系统会将这个文件变成管道文件。...那么我们如何让两个进程看到同一个管道文件呢? 首先清除fork是创建子进程的,子进程会继承父进程的文件地址,这样就能看到同一份管道文件了,但是这个文件并没有名字,所以叫做匿名管道。...PROCSS_NUM 5//创建子进程的数量 #define MakeSeed() srand((unsigned long)time(nullptr)^getpid()^rand()%1234)//生成伪随机数...命名管道 这个管道可用于两个没有血缘关系的进程进行通信。 第一个参数是文件路径+文件名,第二个参数是权限(和创建文件的权限是一个东西)。 成功返回0,失败返回-1.

3.8K70

Linux管道那些事儿

管道是一种文件,可以调用read、write和close等操作文件的接口来操作管道。另一方面管道又不是一种普通的文件,它属于一种独特的文件系统:pipefs。...管道的本质是内核维护了一块缓冲区与管道文件相关联,对管道文件的操作,被内核转换成对这块缓冲区内存的操作。...Linux下创建管道函数: int pipe(int pipefd[2]) 成功调用pipe函数之后,会返回两个打开的文件描述符,一个是管道的读取端描述符pipefd[0],另一个是管道的写入端描述符pipefd...管道没有文件名与之关联,因此程序没有选择,只能通过文件描述符来访问管道,只有那些能看到这两个文件描述符的进程才能够使用管道。如果进程执行了fork操作,那么管道就变成如下所示: ?...单向使用管道,也就是说,如果没有用到管道的进程应该尽早释放管道文件fd,这么做不仅仅是为了让数据的流向更加清晰,也不仅仅是为了节省文件描述符,更重要的原因是:关闭未使用的管道文件描述符对管道的正确使用影响重大

2.6K50

【Android 逆向】Linux 文件分类 ( 普通文件 | 目录文件 | 链接文件 | 字符设备文件 | 管道文件 | 块设备文件 )

文章目录 一、Linux 文件分类 1、普通文件 2、链接文件 3、字符设备文件 4、管道文件 5、块设备文件 一、Linux 文件分类 ---- Linux 文件分类 : " - " 表示 普通文件..." d " 表示 目录文件 " l " 表示 链接文件 " c " 表示 字符设备文件 " p " 表示 管道文件 " b " 表示 块设备文件 1、普通文件 " - " 表示普通文件 , 既不是目录.../magisk 文件为例 , 该 su 文件不是一个真实存在的文件 , 是一个软链接 , 其真实的文件是 ..../magisk , 也就是本目录的 magisk 文件 ; 3、字符设备文件 " c " 表示 " 字符设备文件 " , 如 /dev/ 目录下大部分都是字符设备文件 ; 4、管道文件 " p " 表示...管道文件 ; 5、块设备文件 " b " 表示 " 块设备文件 " , 在 /dev/block/ 目录下基本都是 块设备文件 ; pci , ram 随机存储内存 , adx 硬盘设备 , loop

3.1K10

Linux进程通信 管道

--《Unix环境高级编程》 通俗理解: Linux管道通信,通讯方式正如其名一样,如同一个大管道,一端流入,一端流出。...Code: //参考Linux man手册 #include #include #include #include <stdlib.h...FIFO的使用方法与读写文件类似。先创建FIFO文件,再获取FIFO文件的句柄,然后open、write、read、close。...在调用mkfifo时,会创建一个fifo文件。其中第一个参数可为绝对路径或者相对路径。 测试 ? 总结 对比以上两种管道的方式,可得出PIPE与FIFO的大致差异。 工作方式。...PIPE可称为“匿名管道”,无需命名,在具有亲属关系的进程中使用;FIFO又可称为“有名管道”,在使用过程中,其会在系统中创建FIFO类型文件,从而可通过此文件进行不相关进程间的通信。 通信方式。

3K10

linux快速生成文件

dd命令可以轻易实现创建指定大小的文件,如  dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件文件内容为全0(因从/dev/zero...但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。 在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘。...则可以 dd if=/dev/zero of=test bs=1M count=0 seek=100000 此时创建的文件文件系统中的显示大小为100000MB,但是并不实际占用block,因此创建速度与内存速度相当...seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。 当然,因为不实际写入硬盘,所以你在容量只有10G的硬盘上创建100G的此类文件都是可以的。

3.1K20

linux 命名管道实例详解

linux进程间通信——命名管道 FIFO(命名管道)不同于匿名管道之处在于它提供⼀个路径名与之关联,以FIFO的⽂件形式存储于⽂件系统中。...命名管道是⼀个设备⽂件,因此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够通过FIFO相互通信。...值得注意的是,FIFO(first input first output)总是按照先进先出的原则⼯作,第⼀个被写⼊的数据将⾸先从管道中读出。 创建命名管道的系统函数有两个:mknod和mkfifo。...:mod为创建的命名管道的模式,指明其存取权限;dev为设备值,该值取决于⽂件创建的种类,它只在创建设备⽂件时才会⽤到。...下⾯使⽤mknod函数创建了⼀个命名管道: umask(0); if (mknod("/tmp/fifo",S_IFIFO | 0666) == -1) { perror("mkfifo error

4K21

聊聊 Linux 的匿名管道

相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+...这就要涉及到文件IO的缓冲方式了,关于文件IO, 可以参考我的另一篇文章: 浅谈文件描述符1和2, 在最下面的地方提到文件IO的三种缓冲方式: 全缓冲: 直到缓冲区被填满,才调用系统I/O函数, (一般是针对文件...当管道满的时候 O_NONBLOCK (未设置):write调用阻塞,直到有进程读走数据 O_NONBLOCK ( 设置 ):调用返回-1,errno值为EAGAIN 如果所有管道写端对应的文件描述符被关闭...,则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....#列出testfile1 文件中包含test字符的行 testfile_2:This is a linux testfile!...#列出testfile_2 文件中包含test字符的行 testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 2)以递归的方式查找符合条件的文件。...85 使用uniq命令删除重复的行后,有如下输出结果: $ uniq testfile #删除重复行后的内容 test 30 Hello 95 Linux 85 检查文件并删除文件中重复出现的行...9)直接修改文件内容(危险动作) sed可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由于这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!

9.1K20

Linux命名管道及函数

管道(pipe)应用的一大局限是没有名字,只能用于具有亲缘关系进程之间的通信。而命名管道,也称FIFO,实质是一种文件类型,通过FIFO可以用于任何两个进程间的通信。...,mode为八进制模式,创建示例: mkfifo -m 666 myfifo 创建之后可以在当前文件间看到新建的文件。...函数第一个参数为普通的路径名,即创建后FIFO文件的名字,第二个参数与打开普通文件的open函数中的mode参数相同。...如果要创建的FIFO文件已经存在,则会返回EEXIST错误,因此在创建前应先检查是否创建成功,若文件已存在,只要调用打开FIFO的函数即可。...命名管道的读写 一般的文件I/O函数均可用于FIFO操作,如open、close、read、write等,若要删除一个命名管道,则使用系统调用unlink。

2.6K10

linux 管道符重定向

文件将错误输出重定向到一个文件中(清空原有文件的数据)命令 >> 文件将标准输出重定向到一个文件中(追加到原有内容的后面)命令 2>> 文件将错误输出重定向到一个文件中(追加到原有内容的后面)命令 >...learning materials  Linux系统中的通配符及含义通配符含义*任意字符?...在Linux系统中,变量名称一般都是大写的,命令则都是小写的,这是一种约定俗成的规范。Linux系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。...PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。...用户的主目录(即家目录)SHELL用户在使用的Shell解释器名称HISTSIZE输出的历史命令记录条数HISTFILESIZE保存的历史命令记录条数MAIL邮件保存路径LANG系统语言、语系名称RANDOM生成一个随机数字

3.2K10

管道与重定向、文件查找-Linux每日一练(7)

拢共有 11 篇 Linux 知识点梳理的文章,这次是第 7 篇,梳理完以后 Linux 每日一练就结束更新了,但是还没有完结,后续如果有什么比较重要的 Linux 知识会单独抽出来再讲。 ?...上次我们着重讲解了进程管理的知识,这一节提一下管道、重定向、文件查找。 重定向 在解答上次的重定向问题之前,简单提一下什么是重定向。...标准输入文件(stdin):stdin 的文件描述符为 0,Unix 程序默认从 stdin 读取数据。...标准输出文件(stdout):stdout 的文件描述符为 1,Unix 程序默认向 stdout 输出数据。...* * * * * /bin/mysqlbak.sh >/dev/null 2>&1 题目四:使用管道完成,组合 ps 、 grep 、 awk 、 xargs 、 kill 命令为一行命令,干掉名为

1.2K31

Linux内核编程--管道pipe

管道的定义: 管道是一种进程间通信机制,也是Linux操作系统中的一种文件形式。一个进程写入管道的数据可以被另一个进程读取。数据按先进先出顺序处理。Linux有两种形式的管道文件管道和FIFO。...管道或FIFO都可以使用read/write函数访问,且读写操作都是按顺序发生的,从文件的开头读取并在末尾写入(先进先出机制)。管道或 FIFO 必须同时在读写的两端打开。...管道的创建: 管道由pipe函数创建 #include int pipe(int fd[2]) --创建一个管道并将管道读写端的文件描述符(分别)放入fd[0]和fd[1] --...popen函数还创建一个管道用于父子进程间通信 #include FILE *popen(const char *command, const char *type); --运行成功时返回新文件流.../输出设备,然后返回一个文件指针 int pclose(FILE *stream); --运行成功时返回0,失败时返回-1 --pclose()用来关闭由popen()所建立的管道文件指针,参数stream

3.5K10
领券