2

我正在尝试将标准输出重定向到一个文件,然后将其恢复为 C 中的原始文件,但我面临以下奇怪的问题 - 以下代码成功
in stdout
in stdout
地写入标准输出和in file相应的文件中,这一切都可以。

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#define STDOUT 1
int main(int argc, char* argv[]){
    printf("in stdout \n");
    int old_out = dup(STDOUT);
    close(STDOUT);
    int fd = open("./redirected",O_CREAT|O_RDWR|O_TRUNC,0777);
    printf("in file \n");
    close(fd);
    dup(old_out);
    printf("in stdout\n");
    return EXIT_SUCCESS;
}

但是,删除我的主要功能的第一行:

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#define STDOUT 1
int main(int argc, char* argv[]){
    int old_out = dup(STDOUT);
    close(STDOUT);
    int fd = open("./redirected",O_CREAT|O_RDWR|O_TRUNC,0777);
    printf("in file \n");
    close(fd);
    dup(old_out);
    printf("in stdout\n");
    return EXIT_SUCCESS;
}

导致 in file
in stdout
被写入标准输出并且文件中没有写入任何内容。我想知道这是怎么发生的?谢谢你的帮助。

4

1 回答 1

4

这是一个缓冲问题。在重新安装 stdout 之前,不会刷新您写入“文件中”的缓冲区,因此输出将转到 stdout 而不是文件。在这里添加fflush(stdout);修复它。

于 2012-01-08T17:12:36.540 回答