先将标准输出做一个备份,然后进行dup2操作,最后可以再通过dup2将备份的复制回来。这样就行了,帮你在网上找了个范例,呵呵:)自己省得写了。
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
int main()
{
int sfd,testfd;
testfd = open("temp",O_CREAT | O_RDWR | O_APPEND,0660);
if (-1 == testfd) {
printf("open file error./n");
exit(1);
}
printf("test1/n");
/* 先复制一个真实的文件描述符 */
//sfd = dup(testfd);
sfd=100;
/* 保存标准输出 */
if (-1 == dup2(STDOUT_FILENO,sfd) ) {
printf("can't save fd /n");
exit(1);
}
/* 重定向 */
if (-1 == dup2(testfd,STDOUT_FILENO) ) {
printf("can't redirect fd error/n");
exit(1);
}
printf("test2/n");
/* 此时向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("test3/n");
}
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
int main()
{
int sfd,testfd;
testfd = open("temp",O_CREAT | O_RDWR | O_APPEND,0660);
if (-1 == testfd) {
printf("open file error./n");
exit(1);
}
printf("test1/n");
/* 先复制一个真实的文件描述符 */
//sfd = dup(testfd);
sfd=100;
/* 保存标准输出 */
if (-1 == dup2(STDOUT_FILENO,sfd) ) {
printf("can't save fd /n");
exit(1);
}
/* 重定向 */
if (-1 == dup2(testfd,STDOUT_FILENO) ) {
printf("can't redirect fd error/n");
exit(1);
}
printf("test2/n");
/* 此时向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("test3/n");
}