使用dup2重定向了标准输出后,使用什么方法恢复对终端的输出
发布网友
发布时间:2022-04-18 13:40
我来回答
共2个回答
热心网友
时间:2022-04-18 15:09
使用p进行输入输出重定向后,文件描述符1和0原来指向键盘和屏幕,后来指向了文件;如果要将0和1恢复指向键盘和屏幕,可以事先使用p2或p用其他文件描述符来指向键盘和屏幕,然后再掉用p2或p恢复过来
热心网友
时间:2022-04-18 16:27
给出一个简单的程序给大家,是我刚刚实验的结果
#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 = p(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 == p2(testfd,STDOUT_FILENO) ) {
printf("can't redirect fd error\n");
exit(1);
}
/* 此时向stdout写入应该输出到文件 */
write(STDOUT_FILENO,"file\n",5);
/* 恢复stdout */
if (-1 != p2(sfd,STDOUT_FILENO) ) {
printf("recover fd ok \n");
/* 恢复后,写入stdout应该向屏幕输出 */
write(STDOUT_FILENO,"stdout\n",7);
}
printf("gogogogogogo!\n");
close(testfd);
}