Chinaunix
标题:
问一个《unix环境高级编程》上的问题,请指教
[打印本页]
作者:
semomo
时间:
2006-03-31 20:16
标题:
问一个《unix环境高级编程》上的问题,请指教
书上3.13节有这么一段程序:
程序3-4 对于指定的描述符打印文件标志
#include <sys/types.h>
#include <fcntl.h>
#include “ourhdr.h”
int main(int argc,char* argv[])
{
int accmode,val;
if(argc!=2)
err_quit(“Usage: a.out <descriptor#>”);
if((val=fcntl(atoi(argv[1]),F_GETFL,0))<0)
err_sys(“fcntl error for fd %d”,atoi(argv[1]));
accmode=val&O_ACCMODE;
if(accmode==O_RDONLY)
printf(“read only”);
else if(accmode==O_WRONLY)
printf(“write only”);
else if(accmode==O_RDWR)
printf(“read write”);
else err_dump(“unknown access mode”);
if(val&O_APPEND) printf(“,append”);
if(val&O_NONBLOCK) printf(“,nonblocking”);
#if !defined(_POSIX_SOURCE)&&defined(O_SYNC)
if(val&O_SYNC) printf(“,synchronous writes”);
#endif
putchar(“\n”)
exit(0);
}
注释:
(1)运行结果:
a.out 0 < /dev/tty
read only
a.out 1 > temp.foo
cat temp.foo
write only
a.out 2 2>>temp.foo
write only,append
a.out 5 5<>temp.foo
read write
程序指定的命令参数是2个
可 a.out 0 < /dev/tty 和a.out 2 2>>temp.foo意思是??参数4个??
a.out 1 > temp.foo的意思我倒明白,是把命令a.out 1的结果放到文件temp.foo里面去。
还有,_POSIX_SOURCE宏到底有什么用处阿??那书上第二章说了,但整个那一章就基本上完全看不明白。。。
作者:
adm1ner
时间:
2006-03-31 23:41
a.out 0 < /dev/tty
指的是在文件描述符0上打开/dev/tty 以供读
所以最后返回read only
a.out 2 2>>temp.foo实际上是
a.out 2
2>>temp.foo
两条语句
a.out 5 5<>temp.foo
指的是在文件描述符5上打开temp.foo以供读写
所以最后返回read write
作者:
muxingren
时间:
2006-04-01 13:32
这样解释是shell翻译的,还是a.out程序本身翻译的?
作者:
muxingren
时间:
2006-04-01 13:55
不理解。
可否 说的在详细一些,是谁负责这样解释,shell还是a.out
作者:
adm1ner
时间:
2006-04-01 17:14
那些> < >> <>都是shell完成的,深入的解释还得请哪位高手指点,我也是初学者
作者:
flw2
时间:
2006-04-04 18:17
原帖由
muxingren
于 2006-4-1 13:55 发表
不理解。
可否 说的在详细一些,是谁负责这样解释,shell还是a.out
shell解释的,对于 2>>file
它负责把file打开到文件描述符2,类型是写并append(由操作系统纪录以便对你是否可读写进行检查)。然后a.out继承这个
作者:
jozn
时间:
2006-04-06 14:43
你把这本书多看两遍就会有点明白了,我一个朋友这本书看了1年半感觉才有点收获,不要着急看不懂很正常,慢慢看,相信你会成功的
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2