LinuxSir.cn,穿越时空的Linuxsir!

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

请问用fcntl函数重定向标准输出以后如何恢复

[复制链接]
发表于 2004-5-18 21:43:38 | 显示全部楼层 |阅读模式
fd1=open("somefile",O_WRONLY);
close(1);
fd2=fcntl(fd1,F_DUPFD,1);


我用如上方法重定向了标准输出,请问如何恢复标准输出
发表于 2004-5-18 22:18:29 | 显示全部楼层
恐怕要在这之前复制文件描述符1用以备份才行,就像shell里的做法。
 楼主| 发表于 2004-5-18 22:40:57 | 显示全部楼层
恐怕要在这之前复制文件描述符1用以备份才行,就像shell里的做法。


请问应该如何备份呢?:ask :ask
发表于 2004-5-18 22:56:51 | 显示全部楼层
不严格地说,要恢复标准输出,使用dup系统调用复制父进程的标准输出也可以。
 楼主| 发表于 2004-5-18 23:04:45 | 显示全部楼层
不严格地说,要恢复标准输出,使用dup系统调用复制父进程的标准输出也可以。


哈哈,有思路了。谢谢了
用fork应该也可以把,我试试:thank
 楼主| 发表于 2004-5-18 23:16:09 | 显示全部楼层
用fork成功了
再次感谢
发表于 2004-5-18 23:16:15 | 显示全部楼层
之所以说不严格,是因为父进程的标准输出文件描述符也进行了文件重定向。
应该还有其他办法吧。:ask
 楼主| 发表于 2004-5-18 23:19:10 | 显示全部楼层
呵呵,用fork创造一个子进程,在子进程里面重定向就可以了
发表于 2004-5-18 23:31:01 | 显示全部楼层
fork是一种折衷的办法,这样会消耗一个进程资源。
我们在shell里是这样的。在父进程复制标准输出到一个文件描述符N,继承给子进程后,重定向标准输出后,恢复时再复制N为标准输出即可。
发表于 2004-5-19 20:40:15 | 显示全部楼层
直接打开/dev/fd/1,再复制回去也行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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