请使用文件IO函数拷贝一张图片(图片就是普通文件,普通文件怎么拷贝,图片就怎么拷贝)
要求子进程拷贝后半部分,父进程拷贝前半部分。
ps:是否拷贝成功打开可以打开图形化界面查看,或者使用diff指令--》diff 1.png 2.png
eog 1.png
代码:
#include <myhead.h>
//请使用文件IO函数拷贝一张图片(图片就是普通文件,普通文件怎么拷贝,图片就怎么拷贝)
//要求子进程拷贝后半部分,父进程拷贝前半部分。
int main(int argc, const char *argv[])
{
int fd1 = open("./1.png", O_RDONLY);
int fd2 = open("./2.png", O_WRONLY | O_CREAT | O_TRUNC, 0664);
if (fd1 < 0 || fd2 < 0)
{
perror("open");
return -1;
}
int res, i = 0, len;
char c;
len = lseek(fd1, 0, SEEK_END);
if (len < 0)
{
perror("lseek");
return -1;
}
lseek(fd1, 0, SEEK_SET);
pid_t pid = fork();
if (pid > 0) //父进程
{
wait(0);
lseek(fd1, 0, SEEK_SET);
lseek(fd2, 0, SEEK_SET);
for (int i = 0; i < len / 2; i++)
{
read(fd1, &c, 1);
write(fd2, &c, 1);
}
printf("前半部分完成\n");
}
else if (0 == pid) //子进程
{
lseek(fd1, len / 2, SEEK_SET);
lseek(fd2, len / 2, SEEK_SET);
for (int i = len / 2; i < len; i++)
{
read(fd1, &c, 1);
write(fd2, &c, 1);
}
printf("后半部分完成\n");
}
else if (pid < 0)
{
perror("fork");
return -1;
}
close(fd1);
close(fd2);
return 0;
}