这篇文章主机频道详细介绍了“什么是linux管道,如何使用”。内容详细,步骤清晰,细节处理得当。希望这篇文章《什么是linux管道,如何使用》能帮你解决疑惑。让我们按照主机频道的思路,一起学习新知识。
管道是Linux进程之间的一种通信方式。两个进程可以通过一个共享内存区传递信息,流水线中的数据只能单向流动,也就是说只能有固定的写进程和读进程。目前在任何一个shell中,都可以使用|来连接两个命令,shell会用管道将两个进程的输入输出连接起来,达到进程间通信的目的。
什么是管道?烟斗,英语。管道是Linux进程之间的一种通信方式。两个进程可以通过一个共享内存区传递信息,流水线中的数据只能单向流动,也就是说只能有固定的写进程和读进程。
管道的发明者是道格拉斯·麦克洛伊,他也是UNIX上早期shell的发明者。在他发明了shell之后,他发现系统在运行和执行命令的时候,往往需要把一个程序的输出交给另一个程序来处理。这种操作可以通过使用输入输出重定向和添加文件来完成,例如:


底层的FIFO命名管道的实现和匿名管道完全一样,唯一的区别就是命名管道会有一个全局可见的文件名,供其他人打开使用。在程序中创建命名管道文件有两种方法,一种是使用mkfifo函数。另一种是使用mknod系统调用,例子如下:
[zorro @ zorro-PC pipe]$ cat mymkfifo . c
# include & ltstdio.h & gt
# include & ltsys/types . h & gt;
# include & ltsys/stat . h & gt;
# include & ltstdlib.h & gt
int main(int argc,char *argv[])
{
如果(argc!= 2) {
fprintf(标准错误,& quot参数错误!\ n & quot);
出口(1);
}
/*
if (mkfifo(argv[1],0600)& lt;0) {
perror(& quot;mkfifo()& quot;);
出口(1);
}
*/
if (mknod(argv[1],0600|S_IFIFO,0)& lt;0) {
perror(& quot;mknod()& quot;);
出口(1);
}
退出(0);
}我们使用第一个参数作为创建文件的路径。创建后,其他进程可以使用标准的文件操作,如open()、read()和write()。所有其他操作都类似于匿名管道的使用。需要注意的是,无论是命名管道还是匿名管道,其文件描述都没有offset的概念,因此无法通过lseek进行调整。
主机频道











评论前必须登录!
注册