创建一对父子进程:
父进程负责向文件中写入 长方形的长和宽
子进程负责读取文件中的长宽信息后,计算长方形的面积
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.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[])
{
int retval=fork();
if(retval>0){
int wfd=open("./rectangular_property.txt",O_WRONLY|O_RDONLY|O_TRUNC);
if(wfd==-1){
perror("wopen");
return 1;
}
float len_width[2]={0};
printf("please enter length:");
scanf("%f",&len_width[0]);
while(getchar() != '\n');
printf("please enter width:");
scanf("%f",&len_width[1]);
while(getchar() != '\n');
while(1){
size_t wretval=write(wfd,len_width,sizeof(len_width));
if(wretval==sizeof(len_width)||wretval==-1){break;}
}
close(wfd);
sleep(5);
}
else if(retval==0){
sleep(5);
int rfd=open("./rectangular_property.txt",O_RDONLY);
if(rfd==-1){
perror("ropen");
return 1;
}
float read_data[2]={0};
while(1){
size_t rretval=read(rfd,read_data,8);
if(rretval==0||rretval==-1){break;}
printf("rectangular_area=%.2f\n",read_data[0]*read_data[1]);
}
close(rfd);
}
else{
perror("fork");
}
return 0;
}
运行结果:
写入文件内容: