LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1353|回复: 7

如何将控制台的输出信息保存为文件?(不是指程序的重定向)

[复制链接]
发表于 2005-5-31 19:34:02 | 显示全部楼层 |阅读模式
在自己的程序中,需要将控制台的显示字符保存为文件

注意,不是单个程序的重定向(如 ls > 1.txt,这样对程序限制太大,难道为每个有stdout的程序都写一段代码?)

我想应该打开/dev/tty吧,不过不知道怎么弄

谢谢!!!
发表于 2005-5-31 19:48:08 | 显示全部楼层
int fd = open("filename", O_WRONLY);
dup(fd, STDOUT_FILENO);
close(fd);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-31 19:56:42 | 显示全部楼层
大侠给讲讲第二行是什么意思好吗?

这里复制文件描述符是什么作用?STDOUT_FILENO在哪里定义?什么作用的?
回复 支持 反对

使用道具 举报

发表于 2005-5-31 20:42:51 | 显示全部楼层
第二行应该是dup2(fd, STDOUT_FILENO);
STDOUT_FILENO在unistd.h里有定义,其值为1。
dup2(fd, STDOUT_FILENO)就是1这个文件描述字指向了你自己打开的文件,之后任何写到标准输出的东西都写到了你的文件里。
回复 支持 反对

使用道具 举报

发表于 2005-5-31 23:41:15 | 显示全部楼层
用的办法实际上是换了一种方式的重定向。
回复 支持 反对

使用道具 举报

发表于 2005-6-1 10:24:52 | 显示全部楼层
也可以用script
回复 支持 反对

使用道具 举报

发表于 2005-6-1 18:30:57 | 显示全部楼层
确实不太清楚为什么用重定向反而让程序的限制太大.
回复 支持 反对

使用道具 举报

发表于 2005-6-2 09:43:29 | 显示全部楼层
Post by Tetris
第二行应该是dup2(fd, STDOUT_FILENO);
STDOUT_FILENO在unistd.h里有定义,其值为1。
dup2(fd, STDOUT_FILENO)就是1这个文件描述字指向了你自己打开的文件,之后任何写到标准输出的东西都写到了你的文件里。


是不是复制了个文件描述符啊,,
不错的思路闹,学到了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表