CNo*_*der 4 c++ printf fork stdout stdio
好的,我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
我的CS教授的笔记说如下:
创建新的子进程后,两个进程将在
fork()系统调用后执行下一条指令.请注意,Unix将精确复制父级的地址空间并将其提供给孩子.因此,父进程和子进程具有单独的地址空间.
出于这个原因,我非常困惑为什么它不仅会再次输出当前目录而且还会再次输出"你好"?我认为它会做到这一点的唯一可能原因是它说"复制地址空间"只是在fork之前重新运行所有命令,但这没有任何意义.
使用时printf,输出被缓冲.所以,做一个fflush或\n之后printf.
添加fflush或者\n强制缓冲区被刷新并输出到屏幕.这发生在前叉之前,因此只打印一次.
C99 7.19.2p2
最后一行是否需要终止换行符是实现定义的.
它没有定义如果没有提供终止换行字符会发生什么.由于标准未定义行为,因此行为未定义.