编写一段程序(程序命名为fork()),使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和2个子进程活动。让每一个进程在屏幕上显示字符说明:父进程显示“Father”,子进程分别显示“Child1”,“Child2”;
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
int pid1,pid2;
printf("Father\n");
if((pid1=fork())<0)
{
printf("Child1 fail creat!\n");
return 1;
}
else if(pid1==0)
{
printf("Child1\n");
return;
}
if((pid2=fork())<0)
{
printf("Child2 fail creat!\n");
return 1;
}
else if(pid2==0)
{
printf("Child2\n");
return;
}
}
运行结果:
(1)fork vfork
声明方式:
pid_t fork(void);
pid_t fork(void);
加入头文件
#include<sys/types.h>
#include<unistd.h>
(2)getpid获取进程的pid
将上述源代码中改一下:
如:printf("Child1(pid=%d)",getpid());
(3)lockf 在进程同步中为进程加锁
利用系统调用lockf(fd,mode,size),对指定文件的指定区域(由size指示)进行加锁或解锁,以实现进程同步或互斥。其中,fd是文字描述字;mode是锁定方式,=1表示加锁,=0表示解锁;size是指定文件的指定区域,用0表示从当前位置到文件尾(注:有些linux系统是locking(fd,mode,size))。
在输出行上下各加一句lockf(1,1,0);和lockf(1,0,0);
如:
lockf(1,1,0);
printf("Child1(pid=%d)",getpid());
lockf(1,0,0);