一、linux中管道概念
mknod fifo_name p #创建名称为filename的管道文件 mkfifo fifo_name #创建名称为filename的管道文件,推荐使用mkfifo命令来创建命名管道 echo "test text" > fifo_name #向FIFO中写数据 cat < fifo_name 或 cat fifo_name #用cat命令读取FIFO文件,这个时候,cat命令将一直挂起,直到终端或者有数据发送到FIFO中
int mkfifo(const char *fifo_name, mode_t mode); #创建fifo_name的管道文件 int mknod(const char *fifo_name, mode_t mode | S_FIFO, (dev_t)0); #创建fifo_name的管道文件 pipe_fd = open(fifo_name, open_mode); #打开管道文件fifo_name write(pipe_fd, buffer, bytes_read); #向管道文件的文件描述符pipe_fd的写入数据 read(data_fd, buffer, PIPE_BUF); #从管道文件的文件描述符中读取数据
二、Linux中管道命令
1.管道命令的含义:
管道命令应用形式——command1 | command2
command1将其stdout作为command2的stdin,那command就是一个管道命令。
常见的管道命令有:more,less,head,tail,cut,grep,sort,wc,uniq等等
Remarks:
a)管道命令command2只会处理command1的stdout,而command2的stderr会被予以忽略
b)能够接受stdin的数据的命令才能成为管道命令
2.常见的管道的命令的用法
a)grep
形式:grep [-option] '查找字符串' filename
作用:grep以行为单位去分析,如果某行中含有指定的查找字符串,那么就将这行信息显示出来
grep中的几个重要option:
(1)-v 表示反转匹配,就是将没有match的行显示出来,也就是将没有查找字符串的行显示出来
b)cut
形式1:cut -d ‘分割字符' -f n
作用:以行为单位分析,以指定的分割字符分割每行,然后取出第n列
形式2:cut -c 字符范围
作用:取出每行中指定字符范围的所有字符
3.减号-在管道命令中应用
在管道命令中,会使用前一个命令的stdout作为本命令的stdin,如果管道符号前后命令传递的是文件时,可以使用减号-代替。举例如下:
tar -cvf - /home | tar -xvf - #减号-代表的是打包文件 wget remotehost:/home/wahaha/testscript.sh -O - | sh - #减号-代表的是远程主机上的脚本文件
学习资料参考于:
http://blog.****.net/xiajun07061225/article/details/8471777