ubuntu18系统,read()从标准输入获取数据时,阻止read()前面的printf()打印数据,是什么原因?

ubuntu18系统,代码和程序运行如下,问题是:本意是, printf("请输入数据:");这一行应该先打印输出,然后再从键盘输入数据。但是运行结果显示是先从键盘输入数据,然后打印输出 "请输入数据:",这是什么原因呢?

#include 
#include 
#include 

int main()
{
    // 获取从键盘输入的数据
    printf("请输入数据:");
    char buf[1024] = {0};
    ssize_t size = read(STDIN_FILENO, buf, sizeof(buf));
    printf("buf : %s\n", buf);
    printf("len : %ld\n", strlen(buf));
    printf("return size : %ld\n", size);
    return 0;
}

运行,hello world是键盘键入的内容

hello world
请输入数据:buf : hello world

len : 12
return size : 12

应该是你的终端被read占用,导致刚开始的printf不能打印,等你输入数据完毕,read操作完成,释放了终端,所以后面打印出来了