IO--进程实操
1.创建一个进程扇
#include <051head.h>
int main(int argc, const char *argv[])
{for(int i=0;i<4;i++){pid_t pid=fork();if(pid>0) //父进程{continue;} else if(pid==0) //这是子进程{ printf("pid=%d ppid=%d\n",getpid(),getppid());fflush(stdout);//exit(0); //退出子进程,刷新缓冲区while(1){//printf("这是子进程。。\n");sleep(1);}}else //fork函数运行失败{ERRLOG("fork error..\n");}}while(1);return 0;
}
2.创建一个进程链
#include <25051head.h>
int main(int argc, const char *argv[])
{for(int i=1;i<5;i++){pid_t pid=fork();if(pid==0) //这是子进程{printf("pid=%d ppid=%d\n",getpid(),getppid());}else if(pid>0) //父进程 {wait(NULL);break; }else //fork函数运行失败 {ERRLOG("fork error\n");}}return 0;
}
3.请问打印的结果是什么
输出结果:
info1 from child process_2
info1 from child process_1
info1 from parent process
info2 from parent process
4.实现文件的拷贝,父进程拷贝前一部分,子进程拷贝后一部分
#include <25051head.h>
int main(int argc, const char *argv[])
{FILE* fp=fopen("my.txt","r");if(NULL==fp){ERRLOG("fopen error..\n");}fseek(fp,0,SEEK_END);int num=ftell(fp);int n=(num-1)/2;FILE* fd=fopen("my1.txt","w+");if(NULL==fd){ERRLOG("fopen error..\n"); }char buf[128]="";pid_t pid=fork();if(0>pid){ERRLOG("fork error");}else if(0<pid){fseek(fp,0,SEEK_SET);fseek(fd,0,SEEK_SET);while(n>0){size_t res=fread(buf,1,(n<sizeof(buf))? n:sizeof(buf),fp);if(res<=0){break;}fwrite(buf,1,n,fd);n-=res;}wait(NULL); // 等待子进程完成}else{fseek(fp,n,SEEK_SET);fseek(fd,0,SEEK_SET);while(n>0){size_t res=fread(buf,1,(n<sizeof(buf))? n:sizeof(buf),fp);if(res<=0){break;}fwrite(buf,1,n,fd);n-=res;}exit(0);}fclose(fp);fclose(fd);return 0;
}
打印结果:
思维导图