关于linux重定向的解析
来源:互联网 发布:数据分析要学些什么 编辑:程序博客网 时间:2024/06/10 21:12
关于linux重定向的解析
apue书中 p64程序清单3.4有4种调用方式及结果
---------------------------------------------
./a.out 0 < /dev/tty
read only
./a.out 1 > temp.foo
write only
./a.out 2 2>>temp.foo
write only, append
./a.out 5 5<>temp.foo
read write
----------------------------------------------
前2个很好解释 大家都能看懂 关键是后面2个 把我害苦了
在网上搜索资料<<linux shell 中"2>&1"含义>>这个看后,终于让我想通了为什么
---------------------------------------------------------------------------
现解释如下:
1) 标准输入0作为参数传递给a.out,
< /dev/tty 这个虚拟tty文件的输入被重定向到了a.out的标准输入
也就是a.out的标准输入就变成了/dev/tty
其实可以写成 ./a.out 0 0</dev/tty
2)第二个同理
可以写成 ./a.out 1 1>temp.foo
所以标准输出绑定到了文件temp.foo
相当于在文件描述符1上打开了temp.foo且是只读的模式
向标准输出写东西就写到了文件temp.foo
3) 第三个同理
在文件描述符2上打开了文件temp.foo 而2是标准出错,用了>>表示以追加的模式打开了文件temp.foo
所以取2的属性就取的是打开文件temp.foo的属性,而这个时候系统已经把文件的状态改了打开且追加的模式
4)同理
在5上以读写模式打开文件,so取文件描述5的属性就是取文件的属性,那么read and write 就可以理解了
-------------------------------------------------------------
取了部分代码放下面:
apue书中 p64程序清单3.4有4种调用方式及结果
---------------------------------------------
./a.out 0 < /dev/tty
read only
./a.out 1 > temp.foo
write only
./a.out 2 2>>temp.foo
write only, append
./a.out 5 5<>temp.foo
read write
----------------------------------------------
前2个很好解释 大家都能看懂 关键是后面2个 把我害苦了
在网上搜索资料<<linux shell 中"2>&1"含义>>这个看后,终于让我想通了为什么
---------------------------------------------------------------------------
现解释如下:
1) 标准输入0作为参数传递给a.out,
< /dev/tty 这个虚拟tty文件的输入被重定向到了a.out的标准输入
也就是a.out的标准输入就变成了/dev/tty
其实可以写成 ./a.out 0 0</dev/tty
2)第二个同理
可以写成 ./a.out 1 1>temp.foo
所以标准输出绑定到了文件temp.foo
相当于在文件描述符1上打开了temp.foo且是只读的模式
向标准输出写东西就写到了文件temp.foo
3) 第三个同理
在文件描述符2上打开了文件temp.foo 而2是标准出错,用了>>表示以追加的模式打开了文件temp.foo
所以取2的属性就取的是打开文件temp.foo的属性,而这个时候系统已经把文件的状态改了打开且追加的模式
4)同理
在5上以读写模式打开文件,so取文件描述5的属性就是取文件的属性,那么read and write 就可以理解了
-------------------------------------------------------------
取了部分代码放下面:
#include "apue.h" 2 #include <stdio.h> 3 #include <fcntl.h> 4 int main(int argc, char * argv[]) 5 { 6 int i = 0; 7 int val; 8 for(; i < argc; i++) 9 { 10 printf("%s\n", argv[i]); 11 12 } 13 val = fcntl(atoi(argv[1]), F_GETFL, 0); 14 if (val < 0) 15 err_sys("fcntl error"); 16 switch (val & O_ACCMODE) 17 { 18 case O_RDWR: 19 printf("read write\n"); 20 break; 21 22 } 23 if (val & O_APPEND) 24 printf(",append\n"); 25 // printf("O_RDONLY %d\n", O_RDONLY); 26 //printf("O_RDWR %d\n", O_RDWR); 27 //printf("O_APPEND %d\n", O_APPEND); 28 return 0; 29 }
- 关于linux重定向的解析
- 关于linux重定向的解析
- 关于linux重定向的解析
- Linux关于重定向的详解
- 关于Linux Shell的输出重定向
- 关于Linux中的重定向
- 关于Linux重定向输入输出
- linux 的重定向
- linux 的重定向
- 46 关于Linux的I/O重定向
- 关于重定向的问题
- 关于重定向的API
- 关于iOS的重定向
- linux shell 数据重定向详细解析
- linux time 的重定向
- linux的文件重定向
- Linux重定向的使用
- Linux重定向的基础知识
- c里面可变参数实现日志系统的大概思路
- 每日一算法之选择排序原理及实现
- Linux如何解决动态库的版本控制
- threeJS里怎样实现更新
- memcached全面剖析–4. memcached的分布式算法
- 关于linux重定向的解析
- 转:我是程序员------笨鸟飞呀飞(27),跟我的感受竟然一模一样!
- 利用最大堆和最小堆在线寻找中位数
- Java 集合框架(Collection)和数组的排序
- 安装 ESS 5.0 以后不能上网
- 一个ExtJS+jsp+Servlet与数据库连接且运行成功的例子
- __cdecl调用 和_stdcall调用
- ubuntu下卸载kubuntu桌面
- android Socket