我目前正在学习一门操作系统课程,我们的学习material 声明了以下代码:
int main() {
fork();
printf("hello");
return 0;
}
可以打印"helloHello"、"hhellollo"、"hheelllloo"等任何组合. 我自己也try 过重现这个行为,但失败了,因为输出总是"helloHello". 这种行为真的有可能吗?还是material 有问题? 如果是,有没有可靠的方法来复制它?
我既try 在fork前添加setbuf(stdout, NULL)
来禁用缓冲区,也try 在我们在类中使用的旧版Linux上执行相同的操作,Redhat 7.3(2002年的版本),我认为这可能是一个后来修复的问题.
我还try 将STD标志设置为C99,因为这是我们作业(job)的要求.
我知道以下代码:
int main() {
fork();
printf("hel");
printf("lo");
return 0;
}
可以以"helhellolo"或"helloHello"结束,但我指的是用一个printf调用打印该行的情况.
我在带有GCC 12.1.1的Linux6.2.7上运行Manjaro,而Redhat VM运行的是带有GCC 3.2的Linux2.4.18,以防万一.