Joe*_*hew 10 c printf function
我写了以下内容:
#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);
}
Run Code Online (Sandbox Code Playgroud)
我的预期输出是:
Host real ip is:7.17.11.29
Run Code Online (Sandbox Code Playgroud)
而实际输出是:
7.17.11.29
Host real ip is:
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
dbu*_*ush 11
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'/'");
Run Code Online (Sandbox Code Playgroud)
如果您希望所有写入stdout都是无缓冲的,则可以使用setvbuf禁用缓冲:
setvbuf(stdout, NULL, _IONBF, 0); // _IONBF = unbuffered
Run Code Online (Sandbox Code Playgroud)
或者更简单:
setbuf(stdout, NULL);
Run Code Online (Sandbox Code Playgroud)
然后所有写入stdout将立即出现.
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |