一. 思维导图
二. 练习
1).使用多进程拷贝文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <sys/wait.h>
int main(int argc, const char *argv[]) {
if (argc != 3 ) {
printf("参数数量不正确\n");
return -1;
}
FILE *destfp, *srcfp;
if ((srcfp = fopen(argv[2], "r")) == NULL) {
perror("src open");
return -1;
}
if ((destfp = fopen(argv[1], "w")) == NULL) {
perror("dest open");
return -1;
}
//计算文件大小
int fileSize = fseek(srcfp, 0, SEEK_END);
//光标回到头
fseek(srcfp, 0 , SEEK_SET);
int offset = 0;
pid_t pid = fork();
if (pid < 0) {
perror("fork ");
return -1;
} else if (pid == 0) {
char buff[5] = "";
//子进程
while(offset<(fileSize/2)) {
int didread = fread(buff, 1, sizeof(buff), srcfp);
fwrite(buff, 1, didread, destfp);
offset++;
}
} else {
char buff[5] = "";
//父进程
while(offset>=(fileSize/2) && !feof(srcfp)) {
int didread = fread(buff, 1, sizeof(buff), srcfp);
fwrite(buff, 1, didread, destfp);
offset++;
}
wait(NULL);
}
fclose(srcfp);
fclose(destfp);
return 0;
}
结果展示