使用c语言创建4个进程,c语言系统函数——进程的创建

使用c语言创建4个进程,c语言系统函数——进程的创建

2023年8月2日发(作者:)

使⽤c语⾔创建4个进程,c语⾔系统函数——进程的创建⼀ 、 进程的创建();创建⼀个独⽴的进程pid_t fork(void);使⽤这个命令会创建⼀个独⽴于⽗进程⽽且拷贝⽗进程全部存储空间的⼦进程返回值有三种情况1.⽗进程会返回⼦进程的进程号,pid>02.⼦进程会返回0;pid = 0 ;3.出错会返回-1 ; pid = -1;使⽤模板:if(pid > 0){//⽗进程要执⾏的语句}else if(pid == 0){//⼦进程的语句}else{//出错的语句。}获得本进程的pid getpid();获得⽗进程的pid getppid();如果⽗进程结束了⽽⼦进程并没有结束,⼦进程就会变成孤⼉进程,最后由inti()回收如果⼦进程技术⽽⽗进程没有结束,⼦进程将会变成僵⼫进程,必须由⽗进程主动回收。⽗进程回收⼦进程,使⽤函数wait(),⽗进程会等待⼦进程接受才会继续执⾏如果⽗进程不想主动释放⼦进程可以使⽤⼀级缓冲A -- > fork -- -- waitB -- fork -- //⼦进程在在建⽴⼀个进程,让真正程序为孤⼉进程,使⽤init来回收C -- end2.使⽤exec函数族int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg,..., char * const envp[]);int execv(const char *path, char *const argv[]);int execvp(const char *file, char *const argv[]);int execvpe(const char *file, char *const argv[],char *const envp[]);函数返回:只有错误的时候才会返回-1,如果函数正确进程将会被替换。创建的⼦进程将会替代⽗进程,占⽤⽗进程的pid。execl(),中第⼀参数是想要执⾏程序的路径,下⾯的是要执⾏程序的参数,结尾应为NULL ls -a -l,有三个参数execlp(),从环境变量中找⽂件执⾏,其他的为可变参数,结束为NULLexecle(),从⼀个环境变量数组中寻找程序执⾏,必须传⼊⼀个环境变量的数组下⾯的三个是传⼊字符串数组,⽽不是⼀个⼀个单独的字符串。例题:1.⽗⼦进程⼀个向⽂件中写数据,⼀个计算⽂件的⼤⼩2.调⽤系统提供的程序,仿写终端。#include #include#include#includeint readFromSTDIN(char * p,intcount);//从标准输⼊获取字符串。void split2(char *s,char d,char *r[5]);//分割字符串。intmain(){//定义⼀个数组,⽤来存储参数//参数的个数是不确定的,如何获取不⼀样的//从标准输⼊调⽤系统函数获取字符串,获取包括换⾏和空格。//使⽤strchr和strncpy,分割字符char caCmd[256] ={'0'};memset(caCmd,0,256);char *strarr[5] = {NULL};//指针数组,⼀个存放10个指针的数组pid_t pid;while(1){printf("MyTerm:***n");readFromSTDIN(caCmd,256);if(strcmp(caCmd,"exit") == 0){break;}split2(caCmd,' ',strarr);if(0 == strcmp("exit",caCmd)){break;}pid=fork();if(pid > 0){wait(NULL);}else if(pid == 0){execvp(strarr[0],strarr);perror("exec");break;}}}//传⼊int readFromSTDIN(char * p,intcount){int flag =read(STDIN_FILENO,p,count);if(flag == -1){perror("readFromSTDIN");return -1;}//printf("%d",strlen(p));strtok(p,"n");//printf("%d",strlen(p));return 1;}void split2(char *s,char d,char *r[5]){char * pre =s;char * cur =s;int i = 0;while(1){cur=strchr(cur,d);if(cur == NULL || i > 3){r[i]=pre;return;}char *tmp = (char *)malloc(64);//char *tmp =NULL;strncpy(tmp,pre,cur-pre);r[i]=tmp;i++;//printf("%sn",r[i]);cur = cur + 1;pre=cur;}}

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690957803a472852.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信