好的我正在使用linux中的以下C / C ++代码:
int main() {
printf("hello");
Pid = fork();
if (pid > 0)
printf("I’m the parent!");
else
printf("I’m the child");
return 0;
}
这是我的输出:
set_index
我的CS教授的笔记说明如下:
创建新的子进程后,两个进程都将执行
fork()
系统调用后的下一条指令。请注意 Unix将精确复制父级的地址空间并给予它 对孩子。因此,父进程和子进程是分开的 地址空间。
出于这个原因,我非常困惑为什么它不仅会再次输出当前目录而且还会再次输出“你好”?我认为它会做到这一点的唯一可能原因是它说“复制地址空间”只是在fork之前重新运行所有命令,但这没有任何意义。
答案 0 :(得分:5)
使用printf
时,输出会被缓冲。因此,请在fflush
之后立即\n
或printf
。
添加fflush
或\n
会强制刷新缓冲区并输出到屏幕。这发生在前叉之前,因此只打印一次。
C99 7.19.2p2
最后一行是否需要终止换行符 实现定义的。
它没有定义终止换行字符会发生什么 没有提供。由于标准没有定义行为,所以 行为未定义。