1.創建一個進程扇
#include <051head.h>
int main(int argc, const char *argv[])
{pid_t pid;for(int i=0;i<4;i++){pid=fork();if(pid==-1) //父進程{ERRLOG("fork error..\n");} else if(pid==0) //這是子進程{ printf("pid=%d ppid=%d\n",getpid(),getppid());break;}//父進程//不用寫代碼,默認執行循環,繼續進行fork}while(1); //子進程while(waitpid(-1,NULL,WNOHANG)<=0); // 子進程結束,再回收return 0;
}
2.創建一個進程鏈
#include <25051head.h>
int main(int argc, const char *argv[])
{pid_t pid;for(int i=1;i<5;i++){pid=fork();if(pid==-1) //這是子進程{ERRLOG("fork error\n"); }else if(pid>0) //父進程 {wait(NULL); //阻塞 接受子進程資源 exit(0); }//子進程//不用寫,默認執行循環,繼續forkprintf("pid=%d ppid=%d\n",getpid(),getppid());}while(1);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/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){wait(NULL); // 等待子進程完成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;}}else{fseek(fp,n,SEEK_SET);fseek(fd,n,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);}exit(0);}fclose(fp);fclose(fd);return 0;
}
打印結果:
思維導圖