#include <func.h>
int main(int argc , char *argv[])
{//stdin重定向
ARGS_CHECK(argc,2);
int fd_1=dup2(STDIN_FILENO,10);//10指向0的指向
int fd=open(argv[1],O_WRONLY);
ERROR_CHECK(fd,-1,"open");
dup2(fd,STDIN_FILENO);//0指向fd的指向
write(STDIN_FILENO,"hello\n",6);//此时hello已经被重定向到fd指向的内核缓冲区
dup2(fd_1,STDIN_FILENO);//还原:使0指向内核的标准输入缓冲区
close(fd);
close(fd_1);
return 0;
}
#include <func.h>
int main(int argc , char *argv[])
{//stdout重定向
ARGS_CHECK(argc,2);
int fd=open(argv[1],O_RDWR);
ERROR_CHECK(fd,-1,"open");
int fd_1=dup2(STDOUT_FILENO,10);//10指向1的指向
printf("you can see me!");
//‘\n’能清空终端缓冲。由于终端缓冲是行缓冲,fd所指的是全缓冲,两个缓冲类型不匹配,不清空终端缓冲会有bug
printf("\n");
dup2(fd,STDOUT_FILENO);//1指向fd的指向
printf("you can't see me!");//此时you can't see me已经被重定向到fd指向的内核缓冲区
printf("\n");
dup2(fd_1,STDOUT_FILENO);//还原:使1指向内核的标准输出缓冲
close(fd);
close(fd_1);
printf("you see me!\n");
return 0;
}
#include <func.h>
int main(int argc , char *argv[])
{//stderr重定向
ARGS_CHECK(argc,2);
int fd=open(argv[1],O_RDWR);
ERROR_CHECK(fd,-1,"open");
int fd_2=dup2(STDERR_FILENO,10);//10指向2的指向
dup2(fd,STDERR_FILENO);//2指向fd的指向
ARGS_CHECK(2,1);//错误信息已被重定向到fd指向的内核缓冲区
dup2(fd_2,STDERR_FILENO);//还原:使2指向内核的标准错误缓冲
close(fd);
close(fd_2);
return 0;
}