为什么 printf 在 Bash 中通过管道传输时不起作用?

com*_*fan 1 c bash printf

我有一个 Bash 脚本,它从STDINwork.sh获取一些内容并将其回显到STDOUT

我还有一个 C 程序,return_input它也从STDIN和 printf 获取一些内容到STDOUT

但是当我这样链接它们时:

./work.sh |./return_input
Run Code Online (Sandbox Code Playgroud)

printfreturn_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)