作业-day-240509

思维导图

创建一对父子进程:父进程负责向文件中写入 长方形的长和宽 子进程负责读取文件中的长宽信息后,计算长方形的面积

代码:

#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;
}

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值