依赖的头文件
#include
函数定义
int dup(int oldfd);
int dup2(int oldfd, int newfd);
函数作用
dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。
如果两个文件描述符指向同一个file结构体,file status flag和读写位置只保存一份在file结构体中,并且file结构体的引用计数是2。
如果两次open同一文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,可以有不同的file status flag和读写位置。
实战
需求:在代码中执行2次printf("hello linux\n"),前一次输入到world文件中,后一次输入到屏幕上
#include
#include
#include
#include
#include
void file_redirect()
{
//先备份现场
int outfd = dup(1);
//先做重定向
int fd = open("world", o_wronly|o_creat,0666);
//标准输出到重定向fd到对应的文件
dup2(fd, 1);
printf("hello linux\n");
//需要来一次刷新
fflush(stdout);
//需要恢复1,重新到标准输出
dup2(outfd, 1);
printf("hello linux\n");
}
int main(int argc, char* argv[])
{
file_redirect();
return 0;
}