使用两个进程拷贝文件,父进程拷贝二分之一,子进程拷贝二分之一。
#include <myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid;
pid = fork(); //此时产生了子进程
FILE *fp;
FILE *fp1;
int a=0;
char buf;
if((fp = fopen(argv[1],"r")) == NULL)
{
perror("open error");
return -1;
}
if(pid < 0)
{
perror("fork error");
return -1;
}else if(pid == 0)
{
//子进程
sleep(1);
long int q;
if((fp1 = fopen(argv[2],"a+")) == NULL)
{
perror("open error");
return -1;
}
fseek(fp,0,SEEK_END);
q = ftell(fp);
fseek(fp,q/2,SEEK_SET);
while((buf = fgetc(fp)) != EOF)
{
fputc(buf,fp1);
}
exit(EXIT_SUCCESS);
}else
{
//父进程
if((fp1 = fopen(argv[2],"a+")) == NULL)
{
perror("open error");
return -1;
}
fseek(fp,0,SEEK_END);
long int q = ftell(fp);
fseek(fp,0,SEEK_SET);
while(ftell(fp) < q/2 )
{
buf = fgetc(fp);
fputc(buf,fp1);
}
fflush(fp1);
wait(NULL);
}
fclose(fp);
fclose(fp1);
return 0;
}
使用三个进程拷贝文件
#include <myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid;
pid = fork(); //此时产生了子进程
FILE *fp;
FILE *fp1;
int a=0;
char buf;
if((fp = fopen(argv[1],"r")) == NULL)
{
perror("open error");
return -1;
}
if(pid < 0)
{
perror("fork error");
return -1;
}else if(pid == 0)
{
//子进程
sleep(2);
long int q;
if((fp1 = fopen(argv[2],"a+")) == NULL)
{
perror("open error");
return -1;
}
fseek(fp,0,SEEK_END));
q = ftell(fp);
fseek(fp,q/3*2,SEEK_SET);
while((buf = fgetc(fp)) != EOF)
{
fputc(buf,fp1);
}
exit(EXIT_SUCCESS);
}else
{
pid_t pid1;
pid1= fork();
if(pid1 < 0)
{
perror("fork error");
return -1;
}else if(pid1 == 0)
{
//子进程2
sleep(1);
long int q;
if((fp1 = fopen(argv[2],"a+")) == NULL)
{
perror("open error");
return -1;
}
fseek(fp,0,SEEK_END);
q = ftell(fp)/3;
fseek(fp,q,SEEK_SET);
whiile(ftell(fp) <= q*2)
{
buf= fgetc(fp);
fputc(buf,fp1);
}
exit(EXIT_SUCCESS);
}else
{
//父进程
if((fp1 = fopen(argv[2],"a+")) == NULL)
{
perror("open error");
return -1;
}
fseek(fp,0,SEEK_END);
long int q = ftell(fp);
fseek(fp,0,SEEK_SET);
while(ftell(fp) <= q/3 )
{
buf = fgetc(fp);
fputc(buf,fp1);
}
fflush(fp1);
wait(NULL);
wait(NULL);
}
}
fclose(fp);
fclose(fp1);
return 0;
}