2023-5-6作业
使用文件IO函数,拷贝一张图片,父进程拷贝前半部饭紫禁城拷贝后半部分。不能使用sleep函数。提示1.一个进程拷贝完毕后再开始另外一个进程。2.父子进程各自开各自的文件。
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/wait.h>
int main(int argc, const char *argv[])
{
pid_t cpid=fork();
if(cpid==0) //创建子进程
{int fp=open("./pic.png",O_RDONLY),i=0; // 获取原始图片文件
if(fp<0){perror("open");return -1;}
int fq=open("./copy.png",O_WRONLY|O_CREAT,0664); //创建新的文件
if(fq<0){perror("open");return -1;}
ssize_t res_o=0;char buf[32]="";
while(i<762){bzero(buf,sizeof(buf)); //把文件上半部分信息拷贝到另一个文件过程
res_o=read(fp,buf,sizeof(buf));
write(fq,buf,res_o);i++;}
if(fq<0){exit(errno);} //返回错误信息
else{close(fp);exit(0);} //返回父进程
else if(cpid>0) //父进程
{int wstatus;pid_t wpid=wait(&wstatus);
if(wpid<0){perror("wait");return -1;}
if((wstatus&0xff00)>>8==0)
{int fp=open("./pic.png",O_RDONLY),i=0;
if(fp<0){perror("open");return -1;}
int fq=open("./copy1.png",O_WRONLY|O_CREAT,0664);
if(fq<0){perror("open");return -1;}
ssize_t res_o;char buf[32]="";
while(i<762){bzero(buf,sizeof(buf)); //将下半部分信息拷贝到另一个文件过程
res_o=read(fp,buf,sizeof(buf));
write(fq,buf,res_o);i++;}
if(close(fp)<0){perror("close");return -1;} //关闭文件
if(close(fq)<0){perror("close");return -1;}}} //关闭文件
else {perror("fork");return -1;} //返回错误信息
return 0;
}