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