freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

實驗小組os操作系統(tǒng)實驗一----shell解釋程序?qū)崿F(xiàn)文檔-資料下載頁

2025-08-17 10:36本頁面
  

【正文】 60。waitpid(curJobPid,amp。status,0)。 } for(i=0。ifileCount。++i){ free(files[i])。 } close(fd)。 } /***************************************************/ free(inputBuf)。 for(i=0。i=argCount。++i){ free(arg[i])。 } } /** *命令添加到歷史函數(shù) */ voidaddToHistory(char*input){ strcpy([],input)。/*將當(dāng)前命令拷貝到歷史命令信息數(shù)組中*/ =(+1)%HISTORYMAX。/*修改歷史命令信息數(shù)組頭指針,尾指針*/ if(==) =(+1)%HISTORYMAX。/*循環(huán)*/ } /** *歷史命令函數(shù) */ voidhistoryCmd(){ inti。 for(i=i!=(++i)%HISTORYMAX){ printf(%d.\t%s\n,i,[i])。/*打印所有的歷史命令*/ } } /** *CD命令函數(shù) */ voidcdCmd(char*path){ if(path!=NULL){/*路徑不為空*/ if(chdir(path)0){/*chdir()系統(tǒng)調(diào)用,達到改變當(dāng)前路徑的目的*/ printf(lsh0: Usage: cd path。cd %s Error file or directory!\n,path)。/*chdir()系統(tǒng)調(diào)用失敗*/ } } } /** *打印任務(wù)命令函數(shù) */ voidjobsCmd(){ jobs*p。 inti=0。 p=headJob。 if(headJob==NULL){/*若JOB頭指針為空,則打印無作業(yè)*/ printf([lsh0: ] jobs: no jobs.\n)。 return。 } while(p!=NULL){ printf([lsh0: ] jobs: %d\t%d\t%s\t%s\n,i++,ppid,pstate,pcmdName)。/*打印作業(yè)信息*/ p=plink。 } } /** *任務(wù)后臺化bg %pid命令函數(shù) */ voidbgCmd(){ jobs*p。 intjobNo。 if(*arg[1]!=39。%39。) printf(lsh0: Usage: bg \%jobNo!\n)。 jobNo=atoi(arg[1]+1)。 while(p!=NULL){ /*根據(jù)作業(yè)號,遍歷鏈表,找到指定節(jié)點*/ if(jobNo==ppid){ kill(ppid,SIGCONT)。/*18 SIGCONT 將暫停的進程重新啟動,如果未被暫停,則此信號將被忽略*/ strcpy(pstate,running)。/*修改對應(yīng)節(jié)點狀態(tài)*/ break。 } p=plink。 } printf(lsh0: bg \%jobNo : no this pid process!\n)。 } /** *任務(wù)前臺化函數(shù) */ voidfgCmd(){ jobs*p。 intjobNo。 p=headJob。 if(*arg[1]!=39。%39。) printf(lsh0: Usage: bg \%jobNo!\n)。 jobNo=atoi(arg[1]+1)。 /*根據(jù)作業(yè)號,遍歷鏈表,找到指定節(jié)點*/ while(p!=NULL){ if(jobNo==ppid){ strcpy(pstate,running)。/*修改對應(yīng)節(jié)點狀態(tài)*/ curJobPid=ppid。/*獲取該節(jié)點對應(yīng)工作的進程號*/ strcpy(buf,pcmdName)。/*將命令名復(fù)制到input中,為下一次按下ctrlz作準備*/ signal(SIGTSTP,ctrlz)。/*20 SIGTSTP 將停止信號發(fā)送給聯(lián)機會話的進程,該信號通常由CtrlZ產(chǎn)生*/ kill(ppid,SIGCONT)。/*向?qū)?yīng)工作發(fā)送SIGCONT信號,使其運行*/ waitpid(ppid,NULL,0)。/*父進程等待前臺進程的運行*/ break。 } p=plink。 } printf(lsh0: fg \%jobNo : no this pid process!\n)。 } /** *查找外部命令函數(shù) */ intfindProg(char*cmdBuf){ inti=0。 while(envPath[i]!=NULL){ strcpy(buf,envPath[i])。 strcat(buf,cmdBuf)。/*將路徑與命令連接*/ if(0==access(buf,F_OK))/*調(diào)用系統(tǒng)命令access() ,在絕對路徑下查找命令*/ returnTRUE。 i++。 } returnFALSE。/*沒有找到命令*/ } /** *響應(yīng)鍵盤CTRL + Z操作函數(shù) */ voidctrlz(){ jobs*p。 p=headJob。 while(p!=NULL){/*鏈表不為空*/ /*遍歷鏈表*/ if(curJobPid==ppid){ strcpy(pstate,stop)。/*設(shè)置節(jié)點狀態(tài)*/ } p=plink。 } addJob(curJobPid,buf)。 } /** *添加任務(wù)函數(shù) */ voidaddJob(intjobPid,char*name){ jobs*p。 p=(jobs*)malloc(sizeof(jobs))。/*申請job空間*/ ppid=jobPid。/*給jobPid賦值*/ strcpy(pcmdName,name)。/*設(shè)置命令名*/ strcpy(pstate,running)。/*設(shè)置狀態(tài)為running*/ plink=NULL。 if(headJob==NULL){/*設(shè)置頭指針*/ headJob=p。 endJob=p。 } else{ endJoblink=p。/*設(shè)置尾指針*/ endJob=p。 } free(p)。/*釋放指針*/ } /** *刪除任務(wù)函數(shù) */ voiddelJob(intjobPid){ jobs*p,*q。 p=q=headJob。 while(p!=NULL){ if(ppid==jobPid){/*根據(jù)作業(yè)號,查找作業(yè)*/ if(p==headJob){/*若該作業(yè)為第一個,則修改頭指針*/ headJob=headJoblink。 } elseif(p==endJob){ endJob=q。/*若為最后一個,則須修改尾指針*/ qlink=NULL。 } else{ qlink=plink。/*直接刪除這個節(jié)點*/ } free(p)。 break。 } q=p。 p=plink。/*指向下一個節(jié)點*/ } } /** *調(diào)試程序時信息輸出函數(shù) */ voidDEBUG(char*s1,char*s2){ ifdef DEBUG_ON printf(DEBUG: %s %s\n,s1,s2)。 endif }ITRunner@ 9/14/2022 Page 27 of
點擊復(fù)制文檔內(nèi)容
外語相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1