进程状态间的转化
创建出三个进程完成两个文件之间拷贝工作,子进程1拷贝前一半内容,子进程2拷贝后一半内容,父进程回收子进程的资源
#include <head.h>
int main(int argc, const char *argv[])
{FILE *fp1=NULL,*fp2=NULL;//定义两个文件指针用于读写if((fp1=fopen(argv[1],"r"))==NULL){perror("");return -1;}if((fp2=fopen(argv[2],"w"))==NULL){perror("");return -1;}fseek(fp1,0,SEEK_END);int size=ftell(fp1);fseek(fp1,0,SEEK_SET);//定义父进程pid_t father=-1;father=fork();//使用父进程创建子进程if(father==0)//判断是子进程1{pid_t child=fork();if(child==0)//判断是子进程2{sleep(1);//等待子程序1拷贝上面一般的文件char buf;fseek(fp1,size/2,SEEK_SET);//手动光标后移while(ftell(fp1)!=size)//当文件读写到最后时结束循环{fread(&buf,1,1,fp1);//读fwrite(&buf,1,1,fp2);//写}exit(EXIT_SUCCESS);}else if(child>0)//子进程1{char buf;while(ftell(fp1)<size/2)//读取文件一般大小就停止{fread(&buf,1,1,fp1);//读fwrite(&buf,1,1,fp2);//写}exit(EXIT_SUCCESS);}}else if(father>0){wait(NULL);wait(NULL);}fclose(fp1);fclose(fp2);return 0;
}
ubuntu@ubuntu:day4$ clearubuntu@ubuntu:day4$ gcc h1.c
ubuntu@ubuntu:day4$ ls
1.c a.out fork.c h1.c
ubuntu@ubuntu:day4$ ./a.out fork.c 2.c
ubuntu@ubuntu:day4$ diff fork.c 2.c
ubuntu@ubuntu:day4$ ls -l
总用量 32
-rw-rw-r-- 1 ubuntu ubuntu 10 一月 5 00:52 1.c
-rw-rw-r-- 1 ubuntu ubuntu 267 一月 5 00:56 2.c
-rwxrwxr-x 1 ubuntu ubuntu 12880 一月 5 00:56 a.out
-rw-rw-r-- 1 ubuntu ubuntu 267 一月 4 14:23 fork.c
-rw-rw-r-- 1 ubuntu ubuntu 1112 一月 5 00:56 h1.c
ubuntu@ubuntu:day4$