./a.out 0 < /dev/tty是什么意思啊
1 #include <sys/types.h>
2 #include <fcntl.h>
3 #include <apue.h>
4
5 int
6 main(int argc, char *argv[])
7 {
8 int accmode, val;
9
10 // printf("%s,%s",argv[0],argv[1]);
11
12 if (argc != 2)
13 err_quit("usage: a.out <descriptor#>");
14
15 if ( (val = fcntl(atoi(argv[1]), F_GETFL, 0)) < 0)
16 err_sys("fcntl error for fd %d", atoi(argv[1]));
17
18 accmode = val & O_ACCMODE;
19 if (accmode == O_RDONLY) printf("read only");
20 else if (accmode == O_WRONLY) printf("write only");
21 else if (accmode == O_RDWR) printf("read write");
22 else err_dump("unknown access mode");
23
24 if (val & O_APPEND) printf(", append");
25 if (val & O_NONBLOCK) printf(", nonblocking");
26 #if !defined(_POSIX_SOURCE) && defined(O_SYNC)
27 if (val & O_SYNC) printf(", synchronous writes");
28 #endif
29 putchar('\n');
30 exit(0);
31 }
这是我看UNIX环境高级编程,3-4.c的代码。
上述用法是什么意思啊。。
------解决方案--------------------其实根据程序就可以看出,a.out应该带一个参数,那2就是参数,后面一个2/3就代表描述符了,呵呵
------解决方案--------------------第一个2是传入的参数 就是argv[1]
在POSIX shell中,命令的结果可以通过%>的形式来定义(其中%表示文件描述符:1为标准输出stdout、2为标准错误stderr)!系统默认%值是1,也就是1>,而1>可以简写为>,也就是默认为>。
#ls >redout.lst (等同于ls 1>redout.lst,标准输出重定向)
系统先执行>redout.lst,生成一个空文件,然后系统执行ls,再把结果重定向到redout.lst。这时在终端看不到任何信息,但是#more redout.lst可以看到a1、a2、a3、a4和redout.lst。
#./ourgame 2>rederr.lst (标准错误重定向)
因为系统找不到执行脚本ourgame,产生错误,但并不是显示在终端上,而是把错误信息重定向到了rederr.lst。
#more rederr.lst
sh: ourgame: not found.
------解决方案--------------------
对。