忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: dysnake

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

论坛徽章:
0
发表于 2004-07-02 16:13 |显示全部楼层
我有一个程序使用了dup2对标准输出进行了重定向,但处理完后希望将数据输出权重新还给系统,但有什么办法实现这一动作呢??我实验过重新使用dup2但不奏效,请大家指教一下.

论坛徽章:
0
发表于 2004-07-02 16:19 |显示全部楼层

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

需要在dup2之前先保留原来的文件描述符。

论坛徽章:
0
发表于 2004-07-02 16:38 |显示全部楼层

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

对我看了一下以前的帖子,保留原先的数据描述符.但还是有些不明白,为什么使用fork时主程序的标准输出被重新定向后,子进程仍然可以使用打开的标准输出描述符,操作系统是如何打开这个描述符,难道操作系统一直保留了标准输出的一个副本,为了分配给每一个进程使用????
  

论坛徽章:
0
发表于 2004-07-02 17:02 |显示全部楼层

使用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. }
复制代码

这段程序是以前帖子中一位老兄的程序,我进行了一些修改后,给象我一样的朋友,希望有用.

论坛徽章:
0
发表于 2004-07-03 01:19 |显示全部楼层

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

重新打开/dev/tty即可

论坛徽章:
0
发表于 2014-04-18 13:31 |显示全部楼层
回复 4# dysnake

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


   

论坛徽章:
39
巨蟹座
日期:2013-10-25 10:53:02程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之山东
日期:2016-04-17 12:00:282016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:45程序设计版块每日发帖之星
日期:2016-07-02 06:20:00
发表于 2014-04-18 13:38 |显示全部楼层
……楼上考得一手好古……

论坛徽章:
0
发表于 2014-04-19 10:49 |显示全部楼层
回复 7# windoze
看您也是在论坛的10年大将,诚然,岁月穿梭。。。


   

论坛徽章:
1
天蝎座
日期:2015-03-09 10:14:22
发表于 2015-04-25 09:21 |显示全部楼层
我也是来考古的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票8.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP