行为printf()似乎取决于的位置stdout.
stdout发送到控制台,则printf()行缓冲并在打印换行符后刷新.stdout被重定向到文件,则除非fflush()被调用,否则不刷新缓冲区.printf()在stdout重定向到文件之前使用,则后续写入(对文件)是行缓冲的并在换行后刷新.何时进行stdout行缓冲,什么时候fflush()需要调用?
void RedirectStdout2File(const char* log_path) {
int fd = open(log_path, O_RDWR|O_APPEND|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);
dup2(fd,STDOUT_FILENO);
if (fd != STDOUT_FILENO) close(fd);
}
int main_1(int argc, char* argv[]) {
/* Case 1: stdout is line-buffered when run from console */
printf("No redirect; printed immediately\n");
sleep(10);
}
int main_2a(int argc, char* argv[]) {
/* Case 2a: stdout is not line-buffered when …Run Code Online (Sandbox Code Playgroud)