初识 Pipe pipe , 中文翻译为管道,是 Unix/Linux 系统中一种比较常用的 IPC(Inter Process Communication) 。...管道有两端,一端为写端,另一端为读端。如果一个进程试图往一个空的管道读取数据,那么该进程将会被堵塞,直至管道非空为止。...image.png 想要正确使用管道就必须避免出现 (a) 这种情况。...write_buff[] = "hello world"; int writen = write(pfd[1], write_buff, BUFF_SIZE); close(pfd[1]); 结语 管道的原理和使用方法都特别简单...参考 [^1] 44.2 Figure 44-2, The Linux Programming Interface [^2] 44.2 Figure 44-3, The Linux Programming
命名管道的功能实现 1 命名管道的原理 2 代码实现 2.1 系统调用 2.2 命名管道的封装 2.3 开始使用 3回归概念 Thanks♪(・ω・)ノ谢谢阅读!!! 下一篇文章见!!!...2.2 命名管道的封装 首先我们来认识一下创建管道的系统调用: MKFIFO(3) Linux...使用unlink(path.c_str()) 删除管道 #pragma once #include #include #include <sys/stat.h...使用者只能使用不能管理管道的创建与关闭 表明身份的宏定义:----- 权限不同 greater 1 创建者 :只有创建者才可以建立删除管道 user 2 使用者 :只需要初始化其管道,不需要再建立...如果我们想在不相关的进程之间交换数据,可以使用命名管道(FIFO文件)来做这项工作.
推荐使用psql来连接数据库进行备份和恢复db,同样大小的db,使用psql来restore会比pgAdmin快上数倍!...退出psql控制台 和其他的命令行工具不一样,psql在退出时并不是使用exit,而是使用\q,接着按下回车就行了,这里的q指的就是quit。...psql自动输入密码 方式一:设置环境变量PGPASSWORD 如下: 1 2 3 4 5 #linux export PGPASSWORD=12345 #windows set PGPASSWORD...这里的文件路径必须使用Linux平台下的路径分隔符/,否则会报错。...,请谨慎使用。
相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+123...}' # 输出246 不过这次咱们不来说这些用法, 而是来探讨一些更加有意思的, 那就是 管道两边的数据流"实时性" 和 管道使用的小提示....那么 管道两边的数据流"实时性" 讨论到就先暂告一段落, 接下来将在这个基础上继续讨论: 管道使用的小提示....当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。...,将产生EOF结束标志,read返回0, 程序退出 总结 通过上面的理论和实验, 我们知道在使用管道时, 两边命令的数据传输过程, 以及对管道读写规则有了初步的认识, 希望我们以后在工作时, 再接触管道时
管道是 毫不相关的进程进程间通信::命名管道 管道 首先自己要用用户层缓冲区,还得把用户层缓冲区拷贝到管道里,(从键盘里输入数据到用户层缓冲区里面),然后用户层缓冲区通过系统调用(write)写到管道里...mkfifo命名管道 1号手册是指令,。...2号系统调用接口 创建一个管道,p开头就是命名管道,并不会直接刷新到磁盘中,实际是个符号 这样会阻塞 这样会显示出来(先输入左边的,再输入右边的就会显示),左右两边是两个进程 >>追加写入的方式,但空间一直是...0 所以这就是文件里大小一直是0的原因 你怎么知道打开的是同一个文件 正好符合前提 所以要创建两个可执行程序,各自跑各自的,创建一个common是为了方便使用头文件 client...是客户 server是服务者 makefile中一下运行两个程序 mkfifo,用程序的方式创建管道,第一个参数是要创建的这个管道在那个路径下叫什么名字,也就是要保持唯一性的那些点,第二个是创建一个管道
如,/etc目录下会有大量的文件,如果使用ls很难找到需要的文件,因此可以使用管道命令将ls的结果进行一次筛选,只保留需要的信息。 2 管道 和 数据流重定向 的区别?...3.3.2.2 方式2:命令 | sort [-参数] 使用管道,将前一个命令执行的结果按照指定字段进行排序。...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...3.6.2 tee使用方式 tee只能和管道结合使用,如将last中的信息输出指文件并显示在屏幕上: last | tee -a lastfile | cut -d ' ' f 1 last的所有信息将会被写入文件
管道 首先自己要用用户层缓冲区,还得把用户层缓冲区拷贝到管道里,(从键盘里输入数据到用户层缓冲区里面),然后用户层缓冲区通过系统调用(write)写到管道里,然后再通过read系统调用,被对方(读端)读取...通信是为了更好的发送变化的数据,管道本质上是文件 所以必须要用到系统调用接口来访问管道,其是由系统管理,read和write ,操作系统相当于中介 结论:管道的特征: 1:具有血缘关系的进程进行进程间通信...2:管道只能单向通信 3:父子进程是会进程协同的,同步与互斥的--保护管道文件的数据安全 4:管道是面向字节流的 5:管道是基于文件的,而文件的生命周期是随进程的 再测试,把子进程sleep去掉,就是让子进程写快一点...,父进程sleep几秒,就是让父进程读慢一点,看有什么现象 管道的四种情况 测试管道大小 把c一直往管道里写,把父进程中休眠50秒 结果差不多64kb 写端退了,测试结果 结果是: 读端正常读,写端关闭...void(n),假装使用一下,要不然编译不过 创建父子进程 父进程写,子进程读 子进程要读取,就要关闭自己的写端,父进程同理 子进程中的任务 子进程pid有了管道也有了,就差在父进程添加字段了 先更改一下
有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建。 Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制。...管道的结构 在 Linux 中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。...Linux 管道的创建和使用都要简单一些,唯一的原因是它需要更少的参数。...实现与 Windows 相同的管道创建目标,Linux 和 UNIX 使用下面的代码片段: 创建 Linux 命名管道 if(pipe(fd1)) { printf("pipe() FAILED:...Linux 还支持命名管道。对这些数字的早期评论员建议我,为公平起见,应该比较 Linux 的命名管道和 Windows 的命名管道。我写了另一个在 Linux 上使用命名管道的程序。
管道 进程通信概念 管道 匿名管道 创建匿名管道的过程 管道读写的特性 管道本身的特征 基于管道的进程池设计 命名管道 让两个无血缘关系的进程通信 进程通信概念 什么是进程通信 首先我们清楚,进程是具有独立性的...管道本身的特征 1.管道的生命周期是进程的生命周期 2.管道可以用来进行具有血缘关系的进程之间进行通信,常用于父子通信。...(读写的特性) 在平时使用 | 这种的,比如: sleep 10000 | sleep 200 这就是匿名管道,操作系统会创建父子进程,然后通过管道连接起来,其实命令行解释器就是会去寻找 | 然后进行一系列操作...int n = pipe(fds); assert(n==0); (void)n;//这里防止Release之后上面的assert直接被忽略,导致n被判断没被使用...int n = pipe(fds); assert(n==0); (void)n;//这里防止Release之后上面的assert直接被忽略,导致n被判断没被使用
### 六 psql工具使用及数据库常用维护管理 #### 一 psql工具的使用 ##### 1 用psql连接数据库 ~~~bash [postgres@Centos ~]$ psql -...h localhost -p 5432 -d postgres -U postgres psql (13.2) Type "help" for help....postgres=# ~~~ 其中, - psql是PostgreSQL软件安装家目录下的bin路径下的可执行程序; - -h选项表示host,要连接数据库服务器名或者IP地址;如果要访问的数据库在远端...--------------------------------------------------------------------- PostgreSQL 13.2 on x86_64-pc-linux-gnu...##### 10 创建和使用数据库: ~~~bash postgres=# create database testdb owner t_user; CREATE DATABASE postgres=
(2)管道只能在具有公共祖先的两个进程之间使用。通常,一个管道由一个进程创建,在进程调用fork后,这个管道就能在父进程和子进程之间使用了。(FIFO无此局限)。 ...--《Unix环境高级编程》 通俗理解: Linux的管道通信,通讯方式正如其名一样,如同一个大管道,一端流入,一端流出。...PIPE PIPE是一种半双工管道,其中,fd[1]用来向管道写入数据,fd[0]用来从管道读出数据。若两个进程需要利用PIPE通信,就要保证一个进程使用fd[0],另一个进程使用fd[1]。...FIFO FIFO有时也会被称为命名管道,未命名的管道(PIPE)只能在两个相关的进程间使用,而且这个两个进程还要有共同的创建了它们的祖先进程。但是,通过FIFO,不相关的进程也能进行数据交换。...PIPE可称为“匿名管道”,无需命名,在具有亲属关系的进程中使用;FIFO又可称为“有名管道”,在使用过程中,其会在系统中创建FIFO类型文件,从而可通过此文件进行不相关进程间的通信。 通信方式。
Linux的管道命令 管道命令(Pipe) 管道命令用"|"来表示,管道命令需要接收前一个命令的输出来进行操作,但不能处理前一个命令的错误.
Linux下创建管道函数: int pipe(int pipefd[2]) 成功调用pipe函数之后,会返回两个打开的文件描述符,一个是管道的读取端描述符pipefd[0],另一个是管道的写入端描述符pipefd...管道没有文件名与之关联,因此程序没有选择,只能通过文件描述符来访问管道,只有那些能看到这两个文件描述符的进程才能够使用管道。如果进程执行了fork操作,那么管道就变成如下所示: ?...单向使用管道,也就是说,如果没有用到管道的进程应该尽早释放管道文件fd,这么做不仅仅是为了让数据的流向更加清晰,也不仅仅是为了节省文件描述符,更重要的原因是:关闭未使用的管道文件描述符对管道的正确使用影响重大...因此在使用管道的过程中要注意写入数据是否能及时消费的问题,一旦管道满了,写入就会被阻塞;对于读取端,要及时地读取,防止管道被写满,造成写入阻塞。...上面说的都是常见的管道形式,也就是匿名管道,因为没有实体文件与之关联,所以只能在具有亲属关系的进程间使用。因此就出现了另一种管道形式,命名管道,其最大的差别就是有实体文件与之关联。
Linux 管道 管道的体验 $ ls -al /etc | less 体验管道 的使用 通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行地看。...结合管道来操作一下,下面统计 /etc 下面所有目录数: $ ls -dl /etc/*/ | wc -l ? 4....history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq # 或者$ history | cut -c 8- | cut -d ' ' -f 1 | sort -u Linux
最近我们有一个 SQL 需要导入到 PostgreSQL ,但数据格式使用的是用:---- TOC entry 7877 (class 0 OID 21961)-- Dependencies: 904-...这样的格式只能使用 psql 来进行导入。注意到上面有一个 COPY FROM stdin; 这个是 psql 的专用导入格式。...有关 psql 的参数列表,请参考文章:PostgreSQL: Documentation: 15: psql.上面的参数中:-h 服务器地址-p 数据库服务器运行端口-U 登录用户名-W 登录密码-d...数据提示在导入的数据库,中我们发现 PostgreSQL 使用的 COPY Stdin。在数据的默认有一个数据终止符 \.。这个数据终止符是不能丢的。...https://www.isharkfly.com/t/postgresql-psql-sql/14720
psql作为连接数据库的客户端工具,可以方便的连接数据库,做日常操作或者问题排查,但是新转到PG的朋友可能在使用习惯上很难转过来,因此简单介绍下一些使用技巧。...帮助命令: /data/pgbin12/bin/psql --help Connection options: -h, --host=HOSTNAME database server host...-U stone stone -h /tmp/ -p 15432 -H HTML psql (12.8stone pg12) Type "help" for help. psql帮助命令: Help...options show help on psql command-line options \?...】查看帮助指令 常用的查看database、对象命令: 【\h + 命令】 【\set 】变量 比如输出快捷键背后的SQL明细,在psql设置‘-E'参数也可以实现同样效果
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
抛弃man,使用tldr优雅地阅读手册 1.1 Too Long;Didn’t Read linux一切都在命令行下操作,有着丰富的命令行工具。...还不够优雅、高效,还是习惯在windows下写好,再放到Linux下编译?* 是的,这样是正确的选择,完全没问题,但是如果不是写大型项目,其实直接再Linux下使用vim/vi会更加优雅!...管道配合printf调试程序 Linux下,gdb是一个很好的调试工具,不会用的可以学一下,在这篇文章中,我并不打算介绍gdb,而是教你用管道机制,利用Linux里一些命令配合printf来调试。...Linux 下程序可以协同工作,可以将一个命令/程序的输出通过管道(Pipes)连接到另一个命令/程序的输入,管道操作符是 |。...管道才是Linux的终极优雅! 参考文章:https://blog.csdn.net/freestep96/article/details/127466283?
抛弃man,使用tldr优雅地阅读手册 1.1 Too Long;Didn’t Read linux一切都在命令行下操作,有着丰富的命令行工具。...还不够优雅、高效,还是习惯在windows下写好,再放到Linux下编译? 是的,这样是正确的选择,完全没问题,但是如果不是写大型项目,其实直接再Linux下使用vim/vi会更加优雅!...管道配合printf调试程序 Linux下,gdb是一个很好的调试工具,不会用的可以学一下,在这篇文章中,我并不打算介绍gdb,而是教你用管道机制,利用Linux里一些命令配合printf来调试。...Linux 下程序可以协同工作,可以将一个命令/程序的输出通过管道(Pipes)连接到另一个命令/程序的输入,管道操作符是 |。...管道才是Linux的终极优雅! 参考文章:https://blog.csdn.net/freestep96/article/details/127466283?
相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+...123}' # 输出246 不过这次咱们不来说这些用法, 而是来探讨一些更加有意思的, 那就是 管道两边的数据流"实时性" 和 管道使用的小提示....那么 管道两边的数据流"实时性" 讨论到就先暂告一段落, 接下来将在这个基础上继续讨论: 管道使用的小提示....当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。...总结 通过上面的理论和实验, 我们知道在使用管道时, 两边命令的数据传输过程, 以及对管道读写规则有了初步的认识, 希望我们以后在工作时, 再接触管道时, 能够更加有把握的去利用这一强大的工具。
领取专属 10元无门槛券
手把手带您无忧上云