用fork()創(chuàng)建子進程后執(zhí)行的是和父進程相同的程序(但有可能執(zhí)行不同的代碼分支),子進程往往要調(diào)用一種exec函數(shù)以執(zhí)行另一個程序。
創(chuàng)新互聯(lián)建站是專業(yè)的泗水網(wǎng)站建設公司,泗水接單;提供網(wǎng)站建設、網(wǎng)站制作,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行泗水網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
進程程序替換:替換數(shù)據(jù)和代碼,執(zhí)行不同邏輯,一旦替換之后,父,子進程代碼,數(shù)據(jù)獨立。
主要是創(chuàng)建進程,讓子進程去執(zhí)行命令。
主要有6個調(diào)度函數(shù),函數(shù)名中p表示傳文件名(靠環(huán)境變量來看是否存在PATH),沒p的需把文件路徑傳過來,要執(zhí)行一個程序必須先找到它.
帶e表示用自定義環(huán)境變量,不帶e表示從父進程繼承而來的環(huán)境變量。
#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> int main(int argc,char* argv[]) { pid_t id; while(1) { printf("[lxj/home]$"); fflush(stdout); char cmd_str[1024]={0}; ssize_t size=read(0,cmd_str,sizeof(cmd_str)-1); char cmd[32]={0}; char* my_argv[32]; memset(my_argv,0,sizeof(char*)*32); int length=strlen(cmd_str)-2; // printf("%s",cmd_str); if(size!=-1) { int index=0; while (length >= 0) { while (length >= 0&&cmd_str[length]==' ') { cmd_str[length--] = 0; } while (length >= 0 && cmd_str[length] != ' ') length--; my_argv[index++]=cmd_str+length+1; } my_argv[index]=NULL; int i=0; index--; for(;i<index;++i,--index) { char* tmp=my_argv[i]; my_argv[i]=my_argv[index]; my_argv[index]=tmp; } if(strcmp(argv[0],"cd")==0) { chdir(my_argv[1]); continue; } } id=fork(); if(id<0) perror("fork"); else if(id==0){ execvp(my_argv[0],my_argv); exit(1); } else if(id>0){ pid_t waitPid=waitpid(id,NULL,0); } } return 0; }
分享名稱:編寫一個簡易shell命令行
當前網(wǎng)址:http://aaarwkj.com/article46/ipdjhg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、企業(yè)網(wǎng)站制作、軟件開發(fā)、網(wǎng)站排名、微信小程序、品牌網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)