有\n不带缓冲区:i<n,SUM(A)=2^1+...+2^n
无\n带缓冲区:
(1)第一题打印几个A?产生了几个进程?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
int i = 0; for (; i < 2; i++)
{
fork();
printf("A\n");
}
exit(0);
}
四个进程六个A
(2)打印几个A ?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int i = 0;
for (; i < 2; i++)
{
fork();
printf("A");
}
exit(0);
}
去掉\n,有缓冲区,将缓冲区中的A也复制了。
(3)对比以下两个代码, 看看各自打印几个A ? (理解缓冲区)
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
printf("A\n");
fork(); exit(0);
}
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
printf("A");
fork();
exit(0);
}
有\n不带缓冲区:i<n,SUM(A)=2^1+...+2^n
无\n带缓冲区:
缓冲区:printf:将内容先写到缓冲区中,缓冲区刷新到界面(屏幕)
(4)打印几个A ?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
fork() || fork();
printf("A\n");
exit(0);
}
前一个fork(执行打印A,复制出3,4个fork)的返回值为子进程PID>0,则不执行第二个fork
第三个fork=0(执行过了),执行第四个fork,打印A,出现5,6个fork
第五个fork=0(执行过了,复制第三个,同3),执行第六个fork,打印A(第四个执行过了,不再执行复制)
(5)打印几个A ?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
fork() && fork();
printf("A\n");
exit(0);
}