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

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

Tests (Compare 示例1 and Example 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-输出1

before-fork
0x7fff58cd3324
0x7fff58cd3324

示例2(仅将‘\n’替换为printf("before-fork\n")中的空格)

输出2、输出2

before-fork 0x7ffce0196bb4
before-fork 0x7ffce0196bb4

预期行为

输出1-输出1

这是一个bug吗?若否,原因为何?

推荐答案

这是个窃听器吗?

不是的.

如果不是,原因是什么?

stdout输出(在本例中默认情况下)line缓存在进程本地内存中.缓冲区的内容将在换行符上刷新.

C++相关问答推荐

在x86汇编中,为什么当分子来自RDRAND时DIV会引发异常?

你能用自己的地址声明一个C指针吗?

为什么PLT表中没有push指令?

正确的TCP/IP数据包 struct

Make Node函数.S有什么问题吗?

在CLANG中调试预处理器宏

C I/O:在Windows控制台上处理键盘输入

指向不同类型的指针是否与公共初始序列规则匹配?

Fprintf正在写入多个 struct 成员,并且数据过剩

为什么会出现此错误?二进制表达式的操作数无效

共享目标代码似乎不能在Linux上的进程之间共享

将size_t分配给off_t会产生符号转换错误

x86-64平台上的int_fast8_t大小与int_fast16_t大小

关于不同C编译器中的__attribute__支持

%g浮点表示的最大字符串长度是多少?

将char*铸造为空**

一元运算符

子进程不会修改父进程中的统计信息

如何正确探测平台设备?

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?