#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int i;
for(i=0; i<2; i++){
fork();
printf("-");
}
wait(NULL);
wait(NULL);
return 0;
}
1、问题:请问打印结果为多少“ - ”?
答:8个,父进程第一次调用fork一个子进程,父子分别打印一个“ - ”到缓冲区(2个),第二次fork父子进程分别创建一个子进程,同时也继承父进程的进程空间,其中包括
指令,变量值,程序调用栈,环境变量,缓冲区等。所以第二次fork的两个子进程本身输出缓冲区就有一个“ - ”,所以最终输出的时候,两个父进程打印(4个),两个子进程(4个)。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int i;
for(i=0; i<2; i++){
fork();
printf("-\n");
}
wait(NULL);
wait(NULL);
return 0;
}
2)打印几个“ - ”?
答:6个
程序遇到“\n”,或是EOF,或是缓中区满,或是文件描述符关闭,或是主动flush,或是程序退出,就会把数据刷出缓冲区。需要注意的是,标准输出是行缓冲,所以遇到“\n”的时候会刷出缓冲区,但对于磁盘这个块设备来说,“\n”并不会引起缓冲区刷出的动作,那是全缓冲,你可以使用setvbuf来设置缓冲区大小,或是用fflush刷缓存。