思维导图
创建一对父子进程:父进程负责向文件中写入 长方形的长和宽 子进程负责读取文件中的长宽信息后,计算长方形的面积
代码:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
int main(int argc, const char *argv[])
{
//使用fork创建一对父子进程,
//父进程向文件写入内容:长方形的长和宽
//子进程从该文件中读取内容:读取长和宽信息后,计算长方形面积
int rv=fork(); //创建父子进程
if(rv > 0) //父进程
{
//创建并以可写模式打开文件
int wf=open(argv[1],O_WRONLY | O_CREAT | O_TRUNC,0666);
if(wf==-1)
{
perror("wf");
return 1;
}
int a=0; //长
int b=0; //宽
printf("请输入长和宽:");
scanf("%d %d",&a,&b);
while(getchar()!='\n');
write(wf,&a,4); //写入长信息
write(wf,&b,4); //写入宽信息
close(wf);
sleep(2);
}
else if(rv == 0) //子进程
{
//休眠3秒,让父进程先执行
sleep(3);
//只读模式打开文件
int rf=open(argv[1],O_RDONLY);
if(rf==-1)
{
perror("rf");
return 1;
}
int wide=0;
int height=0;
read(rf,&wide,4); //读取长信息
read(rf,&height,4); //读取宽信息
printf("长方形的面积:%d\n",wide*height);
close(rf);
sleep(1);
}
else if(rv == -1) //fork创建父子进程失败
perror("fork");
return 0;
}
运行结果: