使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??
我有一个程序使用了dup2对标准输出进行了重定向,但处理完后希望将数据输出权重新还给系统,但有什么办法实现这一动作呢??我实验过重新使用dup2但不奏效,请大家指教一下.使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??
需要在dup2之前先保留原来的文件描述符。使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??
对我看了一下以前的帖子,保留原先的数据描述符.但还是有些不明白,为什么使用fork时主程序的标准输出被重新定向后,子进程仍然可以使用打开的标准输出描述符,操作系统是如何打开这个描述符,难道操作系统一直保留了标准输出的一个副本,为了分配给每一个进程使用????:em14::em14:
使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??
给出一个简单的程序给大家,是我刚刚实验的结果#include <stdio.h>;
#include <unistd.h>;
#include <stdlib.h>;
#include <fcntl.h>;
#include <sys/types.h>;
#include <sys/stat.h>;
#include <string.h>;
#include <strings.h>;
int main()
{
int sfd = dup(STDOUT_FILENO), testfd;
printf("sfd = [%d]\n", sfd);
testfd = open("./temp",O_CREAT | O_RDWR | O_APPEND);
if (-1 == testfd)
{
printf("open file error.\n");
exit(1);
}
/* 重定向 */
if (-1 == dup2(testfd,STDOUT_FILENO) ) {
printf("can't redirect fd error\n");
exit(1);
}
/* 此时向stdout写入应该输出到文件 */
write(STDOUT_FILENO,"file\n",5);
/* 恢复stdout */
if (-1 != dup2(sfd,STDOUT_FILENO) ) {
printf("recover fd ok \n");
/* 恢复后,写入stdout应该向屏幕输出 */
write(STDOUT_FILENO,"stdout\n",7);
}
printf("gogogogogogo!\n");
close(testfd);
}
这段程序是以前帖子中一位老兄的程序,我进行了一些修改后,给象我一样的朋友,希望有用.
使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出??
重新打开/dev/tty即可 回复 4# dysnake10年前的好贴呀!!我还以为dup2(STDOUT_FILENO, STDOUT_FILENO);就恢复了呢!!!!结果是没有恢复,导致我关也关不了了。太感谢了!
……楼上考得一手好古…… 回复 7# windoze
看您也是在论坛的10年大将,诚然,岁月穿梭。。。
我也是来考古的 :lol:
页:
[1]