前言
当执行一些二进制文件时,发现有日志丢失的情况,后来知道是输出到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 指的是标准错误输出
文章评论