pipe系统调用经典用法在此不提
由于proc文件系统的存在, pipe系统创建的pipe不一定在密切相关的进程中使用
(经典用法是父创建管道, 由他的子孙进程(包括他自己, 在代码级别上合作)使用)
oldprog 是个已经存在的命令, 把XX结果放在一个文件(标准输出用于其他用途)上:
oldprog
你想写一个程序newprog, 底下调用这个oldprog程序, 然后使用oldprog的XX结果
(运行完不需要这个文件)这样由于使用了exec, pipe系统调用经典用法就用不上了
(因为oldprog可能关掉除了0,1,2的所有其他文件描述符),
要么选择命名管道(mkfifo) 要么创建文件, 最后还要删除它
其实由于proc文件系统的存在, pipe系统调用还是能派上用场
在newprog中
int fds[2];
pipe(fds);
然后newprog创建子进程执行(exec):
oldprog /proc//fd/
newprog 读 fds[0] 就行了
所以只要能把路径名 /proc//fd/ 给另外一个程序就能跟
另外一个程序通过管道传输了避免占用文件系统路径名资源, 还不用删除文件(这个好处可以忽略)
跟命名管道比,有什么好处? 除了不占用文件系统路径名资源, 其他暂时还没想到,
更重要的是这个有什么坏处?
奇淫巧计, 不要学
阅读(682) | 评论(0) | 转发(0) |