作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我写了以下内容:
#include <stdlib.h>
#include <stdio.h>
void ExecAsRoot (char* str);
int main ()
{
printf ("Host real ip is:");
ExecAsRoot("ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'");
return 0;
}
void ExecAsRoot (char* str) {
system (str);
}
我的预期输出是:
Host real ip is:7.17.11.29
而实际输出是:
7.17.11.29
Host real ip is:
这是为什么?
最佳答案
正在缓冲 printf
的输出,因为正在打印的字符串不包含换行符。结果,缓冲区直到程序结束才被刷新,因此出现在 system
命令的输出之后。
要刷新缓冲区,请使用 fflush
:
printf ("Host real ip is:");
fflush(stdout);
ExecAsRoot("ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'");
如果您希望对stdout
的所有写入都是无缓冲的,您可以使用setvbuf
来禁用缓冲:
setvbuf(stdout, NULL, _IONBF, 0); // _IONBF = unbuffered
或者更简单地说:
setbuf(stdout, NULL);
然后所有对 stdout
的写入都会立即出现。
关于c - printf 的输出乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45468072/
我是一名优秀的程序员,十分优秀!