使用fork和printf的GCC奇怪行为,有和没有换行符[重复]

kmynzznz  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(67)

此问题在此处已有答案

printf anomaly after "fork()"(3个答案)
23天前关闭

gcc version 11.4.0(Ubuntu 11.4.0-1ubuntu1~22.04)

也在一些在线编译器上进行了测试(我知道它们可能不是一个可靠的选择)

测试(对比例1和例2)

实施例1

#include <stdio.h>
#include <unistd.h>

int main(void) {
    printf("before-fork\n");
    int a;
    fork();
    printf("%p\n", (void *)&a);
    
    return 0;
}

字符串
输出1

before-fork
0x7fff58cd3324
0x7fff58cd3324


示例2(仅将printf("before-fork\n")中的“\n”替换为空格)
输出2

before-fork 0x7ffce0196bb4
before-fork 0x7ffce0196bb4

预期行为

输出1
这是一个bug吗?如果不是,那么原因是什么?

bbuxkriu

bbuxkriu1#

这是一个bug吗?

若否,原因为何?
stdout输出(在本例中默认)line 缓冲在进程本地内存中。缓冲区的内容在换行符处刷新。

相关问题