当前位置: 技术问答>linux和unix
apue书中一个例子的疑惑
来源: 互联网 发布时间:2016-06-08
本文导语: Figure 3.10 所示程序后面给的运行结果看不懂。 $ ./a.out 0 temp.foo $ cat temp.foo write only $ ./a.out 2 2>>temp.foo write only, append $ ./a.out 5 5temp.foo read write 第一个不...
Figure 3.10 所示程序后面给的运行结果看不懂。
$ ./a.out 0 temp.foo
$ cat temp.foo
write only
$ ./a.out 2 2>>temp.foo
write only, append
$ ./a.out 5 5temp.foo
read write
第一个不知道什么意思,实在搞不懂是怎么重定向的。
第二个没有重定向的时候结果是read write,但加上之后就成了write only 了,为什么?
可能是重定向没有理解好。
$ ./a.out 0 temp.foo
$ cat temp.foo
write only
$ ./a.out 2 2>>temp.foo
write only, append
$ ./a.out 5 5temp.foo
read write
第一个不知道什么意思,实在搞不懂是怎么重定向的。
第二个没有重定向的时候结果是read write,但加上之后就成了write only 了,为什么?
可能是重定向没有理解好。
|
只要稍加修改,你就明白了,在前兩條命令的大於號和小於號左側分別添加0和1。
可以把大於號和小於號想成箭頭,系統在箭頭左側有如下發現:
$ ./a.out 0 0 temp.foo # 箭頭指向temp.foo,因此數據只能從文件描述符1流向temp.foo,即write only。
$ ./a.out 2 2>> temp.foo # 類似上例,但因為是兩個大於號,因此是write only, append。
$ ./a.out 5 5 temp.foo # 箭頭是雙向的,因此是read write。
可以把大於號和小於號想成箭頭,系統在箭頭左側有如下發現:
$ ./a.out 0 0 temp.foo # 箭頭指向temp.foo,因此數據只能從文件描述符1流向temp.foo,即write only。
$ ./a.out 2 2>> temp.foo # 類似上例,但因為是兩個大於號,因此是write only, append。
$ ./a.out 5 5 temp.foo # 箭頭是雙向的,因此是read write。
|
这个程序是测试的是参数argv[1]的访问模式.
第一个是把/dev/tty重定向作为程序的标准输入,然后测试标准输入(参数是0)的访问模式.显然,/dev/tty为只读
第二个如果没有重定向是测试标准输出1的访问模式,默认的标准输出是终端屏幕,是可读写的.加了重定向,标准输出就变成了文件temp.foo, 这时结果就取决于temp.foo文件的访问模式了.
第一个是把/dev/tty重定向作为程序的标准输入,然后测试标准输入(参数是0)的访问模式.显然,/dev/tty为只读
第二个如果没有重定向是测试标准输出1的访问模式,默认的标准输出是终端屏幕,是可读写的.加了重定向,标准输出就变成了文件temp.foo, 这时结果就取决于temp.foo文件的访问模式了.