我有一个 Bash 脚本,它从STDINwork.sh获取一些内容并将其回显到STDOUT。
我还有一个 C 程序,return_input它也从STDIN和 printf 获取一些内容到STDOUT
但是当我这样链接它们时:
./work.sh |./return_input
Run Code Online (Sandbox Code Playgroud)
printf仅return_input在退出时输出到屏幕。为什么?
简化:
[root@ test]# cat work.sh
#!/bin/bash
for i in {1..5}
do
echo test
read
done
Run Code Online (Sandbox Code Playgroud)
的输出cat return_input.c,
#include <stdio.h>
void return_input (void){
char array[30];
gets (array);
printf("%s\n", array);
printf("%#p\n", *(long *)(array+40));
}
main() {
while(1 == 1)return_input();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所有 I/O 操作通常都会被缓冲。这就是为什么如果在执行期间没有太多数据溢出缓冲区和输出,则只有在程序完成后才能获得输出。
fflush如果您想“实时”查看输出,可以使用强制完成 I/O 操作并清除缓冲区的函数
| 归档时间: |
|
| 查看次数: |
1279 次 |
| 最近记录: |