使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出?? http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=359433&page=

使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出?? [复制链接]
0 0

dysnake

稍有积蓄

帖子
999
主题
83
精华
1
可用积分
536
信誉积分
100
专家积分
0
在线时间
0 小时
注册时间
2003-05-13
最后登录
2007-10-17
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
0
电梯直达 跳转到指定楼层
1楼[收藏(0)][报告]
  发表于 2004-07-02 16:13:49  | 只看该作者  | 倒序浏览
分享到:
我有一个程序使用了dup2对标准输出进行了重定向,但处理完后希望将数据输出权重新还给系统,但有什么办法实现这一动作呢??我实验过重新使用dup2但不奏效,请大家指教一下.
  • 本版精华
  • 文库|博客
  • 华为面试题(8分钟写出代码)
  • 自己实现一个RTOS《实时操作系统揭秘》(附源码)
  • 读写文件不是效率很低的嘛,那么数据库为何效率高呢
  • makefile权威文档
  • P2P原理的解释与实现
  • 低通滤波在多节点非对称负载调度中的一个应用.
  • 对于多核程序设计的一点总结
  • 超高性能网络编程, Asynchronous network I/O
  • Berkeley DB简介
  • 跟我一起写 Makefile
linux dhcp peizhi roc  |   关于Unix文件的软链接  |   求教这个命令什么意思,我是新手,刚刚学习 ...  |   sed -e "/grep/d" 是什么意思?谢谢 ...  |  
 
   
kj501

丰衣足食

帖子
817
主题
1
精华
1
可用积分
825
信誉积分
102
专家积分
0
在线时间
0 小时
注册时间
2002-11-19
最后登录
2014-06-24
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
0
2楼[报告]
  发表于 2004-07-02 16:19:13  | 只看该作者

使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??

需要在dup2之前先保留原来的文件描述符。
你不会想去亚马逊上班吧?| 针对数据库事务隔离级别的讨论! |  openstack与docker 谁与争锋 当我们在搞嵌入式,需要什么?
 
   
dysnake

稍有积蓄

帖子
999
主题
83
精华
1
可用积分
536
信誉积分
100
专家积分
0
在线时间
0 小时
注册时间
2003-05-13
最后登录
2007-10-17
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
0
3楼[报告]
  发表于 2004-07-02 16:38:51  | 只看该作者

使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??

对我看了一下以前的帖子,保留原先的数据描述符.但还是有些不明白,为什么使用fork时主程序的标准输出被重新定向后,子进程仍然可以使用打开的标准输出描述符,操作系统是如何打开这个描述符,难道操作系统一直保留了标准输出的一个副本,为了分配给每一个进程使用????
  
你不会想去亚马逊上班吧?| 针对数据库事务隔离级别的讨论! |  openstack与docker 谁与争锋 当我们在搞嵌入式,需要什么?
 
   
dysnake

稍有积蓄

帖子
999
主题
83
精华
1
可用积分
536
信誉积分
100
专家积分
0
在线时间
0 小时
注册时间
2003-05-13
最后登录
2007-10-17
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
0
4楼[报告]
  发表于 2004-07-02 17:02:19  | 只看该作者

使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??

给出一个简单的程序给大家,是我刚刚实验的结果
  1. #include <stdio.h>;
  2. #include <unistd.h>;
  3. #include <stdlib.h>;
  4. #include <fcntl.h>;
  5. #include <sys/types.h>;
  6. #include <sys/stat.h>;
  7. #include <string.h>;
  8. #include <strings.h>;

  9. int main()
  10. {
  11.         int sfd = dup(STDOUT_FILENO), testfd;

  12.         printf("sfd = [%d]\n", sfd);

  13.         testfd = open("./temp",O_CREAT | O_RDWR | O_APPEND);
  14.         if (-1 == testfd)
  15.         {
  16.                 printf("open file error.\n");
  17.                 exit(1);
  18.         }

  19.         /* 重定向 */
  20.         if (-1 == dup2(testfd,STDOUT_FILENO) ) {
  21.                 printf("can't redirect fd error\n");
  22.                 exit(1);
  23.         }

  24.         /* 此时向stdout写入应该输出到文件 */
  25.         write(STDOUT_FILENO,"file\n",5);

  26.         /* 恢复stdout */
  27.         if (-1 != dup2(sfd,STDOUT_FILENO) ) {
  28.                 printf("recover fd ok \n");

  29.                 /* 恢复后,写入stdout应该向屏幕输出 */
  30.                 write(STDOUT_FILENO,"stdout\n",7);
  31.         }

  32.         printf("gogogogogogo!\n");
  33.         close(testfd);
  34. }
复制代码

这段程序是以前帖子中一位老兄的程序,我进行了一些修改后,给象我一样的朋友,希望有用.
你不会想去亚马逊上班吧?| 针对数据库事务隔离级别的讨论! |  openstack与docker 谁与争锋 当我们在搞嵌入式,需要什么?
 
   
JohnBull

版主

帖子
8710
主题
226
精华
5
可用积分
9231
信誉积分
441
专家积分
20
在线时间
1507 小时
注册时间
2002-08-27
最后登录
2015-04-29
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
0
5楼[报告]
  发表于 2004-07-03 01:19:03  | 只看该作者

使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??

重新打开/dev/tty即可
Hold the truth! It's your weapon! -- X-Files
新浪微博:@sched_yield
==
政治立场坐标 0.8
文化立场坐标 0.8
经济立场坐标 0.2
你不会想去亚马逊上班吧?| 针对数据库事务隔离级别的讨论! |  openstack与docker 谁与争锋 当我们在搞嵌入式,需要什么?
 
   
kangear

稍有积蓄

帖子
184
主题
10
精华
0
可用积分
356
信誉积分
712
专家积分
0
在线时间
219 小时
注册时间
2012-02-04
最后登录
2015-08-26
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
0
6楼[报告]
  发表于 2014-04-18 13:31:28  | 只看该作者
回复 4# dysnake 

10年前的好贴呀!!我还以为dup2(STDOUT_FILENO, STDOUT_FILENO);就恢复了呢!!!!结果是没有恢复,导致我关也关不了了。太感谢了!


   
http://blog.csdn.net/kangear
你不会想去亚马逊上班吧?| 针对数据库事务隔离级别的讨论! |  openstack与docker 谁与争锋 当我们在搞嵌入式,需要什么?
 
   
windoze

实习版主

帖子
1566
主题
13
精华
0
可用积分
11270
信誉积分
2597
专家积分
0
在线时间
3561 小时
注册时间
2004-05-30
最后登录
2015-09-11
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
13
巨蟹座日期:2013-10-25 10:53:02 2015亚冠之浦和红钻日期:2015-08-06 18:41:41 程序设计版块每日发帖之星日期:2015-06-13 22:20:00 2015亚冠之北京国安日期:2015-06-10 15:55:35 2015小元宵徽章日期:2015-03-06 15:57:20 2015年迎新春徽章日期:2015-03-04 09:49:03 技术图书徽章日期:2014-03-22 13:55:36 双鱼座日期:2014-01-23 00:06:54 2015亚冠之阿尔希拉尔日期:2015-09-03 00:30:50
7楼[报告]
  发表于 2014-04-18 13:38:44  | 只看该作者
……楼上考得一手好古……
Unix is like a wigwam -- no Gates, no Windows, and an Apache inside. 
Unix is very user-friendly. It`s just picky who its friends are.
你不会想去亚马逊上班吧?| 针对数据库事务隔离级别的讨论! |  openstack与docker 谁与争锋 当我们在搞嵌入式,需要什么?
 
   
kangear

稍有积蓄

帖子
184
主题
10
精华
0
可用积分
356
信誉积分
712
专家积分
0
在线时间
219 小时
注册时间
2012-02-04
最后登录
2015-08-26
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
0
8楼[报告]
  发表于 2014-04-19 10:49:22  | 只看该作者
回复 7# windoze 
看您也是在论坛的10年大将,诚然,岁月穿梭。。。


   
http://blog.csdn.net/kangear
你不会想去亚马逊上班吧?| 针对数据库事务隔离级别的讨论! |  openstack与docker 谁与争锋 当我们在搞嵌入式,需要什么?
 
   
Fart_King

白手起家

帖子
55
主题
13
精华
0
可用积分
77
信誉积分
173
专家积分
0
在线时间
109 小时
注册时间
2014-07-16
最后登录
2015-08-20
  • 问答
  • 好友
  • 博客
  • 消息
论坛徽章:
1
9楼[报告]
  发表于 2015-04-25 09:21:05  | 只看该作者

你可能感兴趣的:(使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出?? http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=359433&page=)