商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文



【IT168 技术文档】

    五、与管道相关的系统命令

    现在开始,我们来研究与进程间通信密切相关的一些系统命令。首先介绍的是mkfifo命令,它的功能与mkfifo系统调用相似,只不过它是用来在命令行中建立一个命名管道。

    在命令行下建立fifo的专用文件,即命名管道的常用方法有两个,mkfifo命令便是其中之一。mkfifo命令的一般用法如下所示:

mkfifo [options] name

    这里的options一般为-m,即模式,用以指出读写权限;name是要创建的管道的名称,必要时可以加上路径。如果我们没有规定权限,该命令会采取默认值0644。这里以一个具体实例来说明如何在/tmp目录下面建立一个称为cmd_pipe的命名管道:

$ mkfifo /tmp/cmd_pipe

    下面用例子说明如何给命名管道指定读写权限。这里我们先将前面建立的管道删掉,然后重新建立管道,并指定管道的权限为0644,当然您也可以指定其他权限:

$ rm cmd_pipe $ mkfifo -m 0644 /tmp/cmd_pipe

    上面的权限一经建立,就能够在命令行行下通过此管道进行通信了。比如,可以在一个终端上,利用cat命令来读取管道:

$ cat cmd_pipe

    当输入该命令后,我们的进程就会被挂起,等待写入程序打开此管道。现在,在另一个终端上利用echo命令向这个命名管道写入:

$ echo Hi > cmd_pipe

    这个命令结束后,要读取该管道的程序(即cat)将被唤醒,然后结束。为醒目起见,这里列出完整的读取方(也就是读取管道的程序)输入的命令和得到的结果:

$ cat cmd_pipe Hi $

    由此看来,命名管道不仅在C程序中非常有用,而且在脚本中作用也很大。当然,如果组合使用,效果也是很好的。

    除了mkfifo命令外,mknod命令也可以用来创建命名管道,其用法如下所示:

$ mknod cmd_pipe p


    该命令执行后,将在当前目录下创建一个命名管道cmd_pipe,p用于指出建立的是命名管道。

    六、小结

    在这篇文章中,我们介绍了管道和命名管道的概念,详细的说明了应用程序和命令行创建管道的方法,以及通过它们进行通信的I/O机制。然后,讨论了如何利用dup和 dup2命令来进行输入输出重定向。我们希望本文能够帮您更好的了解Linux下的管道技术。

1 2 3 4 5 6 7
©版权所有。未经许可,不得转载。
[责任编辑:赵建凯]
[an error occurred while processing this directive]