免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1728 | 回复: 0
打印 上一主题 下一主题

[新手入门] 12--/dev/fd(UNIX) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-25 15:05 |只看该作者 |倒序浏览
比较新的系统都提供名为/dev/fd的目录,其目录项是名为0、1、2等的文件。打开文件/dev/fd/n等效于复制描述符n(假定描述符n是打开的)。
在函数中调用:
fd=open("/dev/fd/0",mode);
   大多数系统忽略所指定的mode,而另外一些则要求mode是所涉及的文件(在这里则是标准输入)原先打开时所使用的mode的子集。因为上面的打开等效于:
fd=dup(0);
   描述符0和fd共享同一文件表项(见图3-3)。例如,若描述符0被只读打开,那么我们也只对fd进行读操作。即使系统忽略打开方式,并且下列调用成功:
fd=open("/dev/fd/0",O_RDWR);
我们仍然不能对fd进行写操作。
   我们也可以用/dev/fd作为路径名参数调用creat,或调用open,并同时指定O_CREAT。这就允许调用creat的程序,如果路径名参数是/dev/fd/1等仍能工作。
   某些系统提供路径名/dev/stdin,/dev/stdout和/dev/stderr。这些等效于/dev/fd/0,/dev/fd/1和/dev/fd/2。
/dev/fd文件主要由shell使用,这允许程序以对待其他路径名一样的方式使用路径名参数来处理标准输入和标准输出。例如,cat(1)程序将命令行中的一个单独的-特别解释为一个输入文件名,该文件指的是标准输入。例如:
filter file2|cat file1 - file3|lpr
   首先cat读file1,接着读其标准输入(也就是filterfile2命令的输出),然后读file3,如若支持/dev/fd,则可以删除cat对-的特殊处理,于是我们就可键入下列命令行:
filter file2|cat file1 /dev/fd/0 file3|lpr
   在命令行中用-作为一个参数特指标准输入或标准输出已由很多程序采用。但是这会带来一些问题,例如若用-指定第一个文件,那么它看来就像开始了另一个命令行的选择项。/dev/fd则提高了文件名参数的一致性,也更加清晰。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34065/showart_286020.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP