Sou*_*osh 3 c unix linux ubuntu gcc
好的,这是我在Ubuntu 17.10上使用的初始代码.
#include <unistd.h>
#include <stdio.h>
void main()
{
printf("Demonstrating fork():\n");
fork();
printf("After fork():\nProcess Id is %d\n", getpid());
}
Run Code Online (Sandbox Code Playgroud)
所以是的,我执行了两次确认.但后来我注意到在线GCC编译器和我大学校园里的RedHat,输出结果非常不同:
现在据我所知,fork()创建了调用它的进程的另一个实例.但是在Ubuntu中,它似乎是从代码中引入它的位置复制的,而不是整个Process.为了检测它,我稍微查了一下代码:
#include <unistd.h>
#include <stdio.h>
void main()
{
fork();
printf("Demonstrating fork():\n");
printf("After fork():\nProcess Id is %d\n", getpid());
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我对输出的观察是正确的:
所以任何人都可以证实这一点,并解释为什么会发生这种情况,或者只是我系统上的一个错误?
但后来我注意到在线GCC编译器和我校区的RedHat,输出结果非常不同.
它与用户空间缓冲区的printf()使用有关.
如果程序在终端执行并且输出未重定向到文件,则通过printf()ing 刷新缓冲区\n.
在线版本不会printf()通过a 刷新缓冲区,\n因为它正在使用另一个刷新策略(例如:输出可能被重定向到文件).
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |