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

kmynzznz  于 2024-01-06  发布在  其他
关注(0)|答案(1)|浏览(313)

此问题在此处已有答案

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

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

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

测试(对比例1和例2)

实施例1

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. int main(void) {
  4. printf("before-fork\n");
  5. int a;
  6. fork();
  7. printf("%p\n", (void *)&a);
  8. return 0;
  9. }

字符串
输出1

  1. before-fork
  2. 0x7fff58cd3324
  3. 0x7fff58cd3324


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

  1. before-fork 0x7ffce0196bb4
  2. before-fork 0x7ffce0196bb4

预期行为

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

bbuxkriu

bbuxkriu1#

这是一个bug吗?

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

相关问题