如下程序输出的“-”的数目是多少:
程序1:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int i = 0;
for (i = 0; i < 2; i++)
{
fork();
printf("-");
}
return 0;
}
输出:8个“-”
程序2:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int i = 0;
for (i = 0; i < 2; i++)
{
fork();
printf("-\n");
}
return 0;
}
输出:6个“-”
行缓冲:在这种情况下,当输入或输出缓冲区中遇到换行符时,标准I/O库执行I/O操作,输出信息便会显示出来。
全缓冲:在这种情况下,只有当输入或输出缓冲区满时,标准I/O库才会执行I/O操作,输出信息才显示出来。
程序1输出8个“-”主要是因为父进程在i=1时,执行fork后生成的子进程拷贝了父进程的输出缓冲区的内容,而程序2中在输出中加入了换行符,进行了缓冲去刷新,所以fork时复制给子进程的缓冲区内容为空。