OS fork 练习
Posted 霜序0.2℃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OS fork 练习相关的知识,希望对你有一定的参考价值。
练习
1
编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上打印一个字符:例如父进程打印’a’,一个子进程打印字符’b’,另一个子进程打印字符’c’。多次执行程序,观察并记录屏幕上的显示结果,是否有不同,将你的实验结果写入实验报告。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int pid;
pid=fork();
if (pid != 0) {
printf("a\\n",pid);
} else {
printf("b\\n");
pid = fork();
if (pid != 0) {
printf("c\\n",pid);
} else {
printf("c\\n");
}
}
return 0;
}
[root@Cai 1]# ./1
abcc
我们在里面加一点东西
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int pid;
pid=fork();
if (pid != 0) {
printf("父进程,子进程为:%d a\\n",pid);
} else {
printf("子进程,b\\n");
pid = fork();
if (pid != 0) {
printf("父进程,子进程为:%d c\\n",pid);
} else {
printf("子进程,c\\n");
}
}
return 0;
}
[root@Cai 1]# ./1
父进程,子进程为:28742 a
[root@Cai 1]# 子进程,b
父进程,子进程为:28743 c
子进程,c
2
修改上述程序,每一个进程循环10次打印一句话。例如一个子进程打印’daughter…‘另一个子进程打印’son…’,父进程打印 ‘parent…’,多执行几次,观察并记录屏幕上的显示结果,是否有不同,将你的实验结果写入实验报告。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int pid, i;
pid=fork();
if (pid != 0) {
for (i=0; i<10; i++) printf("parent\\n");
} else {
for (i=0; i<10; i++) printf("son\\n");
}
return 0;
}
结果都是parent在先,son在后,没有交替的情况
3
利用vi编辑器,创建源代码文件t1.c,内容如下
#include <stdio.h>
#include <unistd.h>
int main ()
{
printf("hello...");
fork();
return 0;
}
[root@Cai 3]# ./test
hello...[root@Cai 3]# hello...
一般来讲,fork是从这句话之后的语句开始执行两次,但是由于printf并不是立即输出,即先存在缓存区中再输出,fork的时候还没有输出,所以fork直接拷贝了缓存区,在最后的时候进行输出
4
利用vi编辑器,创建源代码文件ft1.c,内容如下
#include <stdio.h>
int main(void)
{
int i;
for(i=0; i<2; i++)
{
fork();
printf("-");
}
return 0;
}
[root@Cai 4]# ./test
--[root@Cai 4]# ------
画一个图
fork会将之前缓存区里的--
进行复制
5
拷贝并修改ft1.c为ft2.c,内容如下
#include <stdio.h>
int main(void)
{
int i;
for(i=0; i<2; i++)
{
fork();
printf("-\\n");
}
return 0;
}
[root@Cai 5]# ./test
-
-
[root@Cai 5]# -
-
-
-
fork会将第二个换行符号之后的复制
以上是关于OS fork 练习的主要内容,如果未能解决你的问题,请参考以下文章