在C中重定向stdout时的奇怪行为
我正在尝试将stdout重定向到一个文件,然后在C中将其恢复为原始文件,但我面临以下奇怪的问题 – 下面的代码片段成功写入
in stdout
in stdout
在stdout和相应in file
中的文件中都可以。
#include #include #include #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; }
但是,删除我的主要function的第一行:
#include #include #include #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
写在stdout上,没有写在文件中。 我想知道这是怎么发生的? 谢谢你的帮助。
这是一个缓冲问题。 您在“文件”中写入的缓冲区在重新安装stdout之前未刷新,因此输出将转到stdout而不是文件。 添加fflush(stdout);
把它固定在这里。