前言

当执行一些二进制文件时,发现有日志丢失的情况,后来知道是输出到buffer中,换行会将buffer中的内容输出到控制台,而如果没有换行那么会输出到buffer中。

一个例子

#include<iostream>
#include<string>
#include <unistd.h>
using namespace std;

int main(){
        while (true){
        usleep(30000);
        cout << "a" ;
		}
        return 0;
}

编译执行:

g++ main.cpp
./a.out

发现没有输出

而如果加入换行符:

#include<iostream>
#include<string>
#include <unistd.h>
using namespace std;

int main(){
        while (true){
        usleep(30000);
        cout << "a" << endl;
		}
        return 0;
}

则会有输出

解决方案

stdbuf -i0 -o0 -e0 ./a.out

stdbuf 可以关闭buffer
-i 指的是标准输入
-o 指的是标准输出
-e 指的是标准错误输出

作者:Hello_wshuo,