Linux输入输出重定向
linux输入输出重定向
需求1:
通过程序来将pa aux命令输出的内容保存至一个文件中。
实现:
代码如下
1 |
|
思路
用重定位的方式,让STDOUT文件描述符指向我们想要保存指令执行结果的文件。
再用exec函数族,将当前程序的内容替换为ps指令所对应的内容。
这样在执行过程中的输出,就自然的会放入我们制定好的文件当中。
存在问题
因为exec后,程序被替换,导致后续的close无法执行,文件描述符没有被关闭。只能依赖程序结束后通过系统回收。
后续可通过信号机制来处理。
相关函数
dup2函数
1 | dup2(int oldfd,int newfd) |
作用:让newfd文件描述符指向oldfd文件描述符所对应的文件。改变文件描述符的指向。
dup为仅复制一份文件描述符,保存一份文件描述符的副本。
exec函数族
作用:将当前程序所执行的内容替换为指定程序的内容。
1 | int execl(const char *pathname, const char *arg) |
返回值:只有当发生错误时才返回-1,正常执行时不会返回
使用例:
1 | execl("./a.out","./a.out","111",NULL); |
两个函数区别在于:
execl的文件指定方式可以采用绝对路径和相对路径
execlp的文件会从系统的环境变量中去寻找(execlp中的p即为path,环境变量)
注意:
arg为控制台参数,其起始位为0,所以第二个参数第一个位置应该填写argv[0],也就是文件路径名。
arg为可变参数,最后一个参数应为NULL,提示参数已经全部录入完毕。
在控制台中带有”-“的参数,在参数中也应带有”-“。
arg对应的变量应为字符形式,即使想填写111之类的数字,也应以字符串的形式填入。
需求2:
在bash中实现上述操作
实现:
1 | ps aux > out.txt |
相关资料:
Linux下的输入输出重定向:http://c.biancheng.net/view/942.html