所以我正在尝试使用 dup(( 将标准输出重定向到文件。
int save_fd;
save_fd=dup(1); //saves the current stdout
close(1); //closes stdout
dup2(file.txt, 1);//redirect output to file.txt
//output goes to file.txt
dup2(save_fd, 1); restore stdout
close(1);
我知道我可以使用 fopen 打开文件。由于 dup2 采用 int,如何为 file.txt 指定文件描述符?
使用 open
返回 fd 而不是 fopen
。
好吧,您有两种可能来获取文件描述符:
-
open()
-
fopen()
,然后在打开的流上调用fileno()
因此,在open()
的情况下,成功情况下的返回值是您要查找的文件描述符:
int fd = open("some_path", ...);
在你想使用 fopen()
的情况下,你仍然可以检索与开放流关联的文件描述符,但你需要调用函数fileno()
:
FILE *stream = fopen(some_file, "w");
int fd = fileno(stream);