用文件IO拷贝一张图片,要求子进程拷贝后半部分,父进程拷贝前半部分。不允许使用sleep(1)函数。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define ERR_MSG(msg) do{\
printf("line:%d\n",__LINE__);\
perror(msg);\
}while(0)
int main(int argc, const char *argv[])
{
char buff[32] = "";
ssize_t res = 0;
pid_t pid = fork();
int fd_r = open("./1.png",O_RDONLY);
if(fd_r < 0)
{
ERR_MSG("open");
return -1;
}
int fd_w = open("./2.png",O_WRONLY|O_CREAT|O_TRUNC,0664);
if(fd_w < 0)
{
ERR_MSG("open");
return -1;
}
off_t size = lseek(fd_r,0,SEEK_END);
if(pid > 0)
{
lseek(fd_r,0,SEEK_SET);
lseek(fd_w,0,SEEK_SET);
char c;
for(int i=0;i<size/2;i++)
{
read(fd_r,&c,1);
write(fd_w,&c,1);
}
close(fd_r);
close(fd_w);
}
else if(0 == pid)
{
lseek(fd_r,size/2,SEEK_SET);
lseek(fd_w,size/2,SEEK_SET);
while((res = read(fd_r,buff,sizeof(buff))) > 0)
{
write(fd_w,buff,res);
}
close(fd_r);
close(fd_w);
}
else
{
ERR_MSG("fork");
return -1;
}
return 0;
}