操作系統(tǒng)實(shí)踐報(bào)告_第1頁
操作系統(tǒng)實(shí)踐報(bào)告_第2頁
操作系統(tǒng)實(shí)踐報(bào)告_第3頁
操作系統(tǒng)實(shí)踐報(bào)告_第4頁
操作系統(tǒng)實(shí)踐報(bào)告_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、操作系統(tǒng)實(shí)踐報(bào)告多進(jìn)程主題Sh1.c:實(shí)現(xiàn)外殼程序,并需要以下功能支持命令參數(shù)$ echo arg1 arg2 arg3$ ls /bin /usr/bin /home實(shí)現(xiàn)內(nèi)置命令cd,pwd,exit$ cd /bin$ pwd/bin想法:注意:首先建立一個(gè)死循環(huán)模擬外殼終端,讀取用戶的輸入,根據(jù)空格將輸入分成字符串?dāng)?shù)組,然后調(diào)用excute進(jìn)行處理。1.回聲根據(jù)數(shù)組的第一個(gè)元素來確定命令是什么,在確定它是ehco之后,分叉一個(gè)新的進(jìn)程并一個(gè)接一個(gè)地輸出它的內(nèi)容,父進(jìn)程在執(zhí)行之前等待子進(jìn)程退出,確保輸出不會(huì)在屏幕上被中斷。2.ls讀取用戶輸入并根據(jù)拆分?jǐn)?shù)組判斷為ls命令后,分叉一個(gè)新的進(jìn)程

2、,調(diào)用execlp函數(shù)將/bin/ls下的ls程序加載到子進(jìn)程中,并將拆分?jǐn)?shù)組參數(shù)部分傳遞給ls。同樣,父進(jìn)程等待子進(jìn)程退出,以確保輸出不會(huì)在屏幕上中斷。3.激光唱片同樣,在輸入并分割成數(shù)組后,判斷它是cd命令后,分叉一個(gè)新進(jìn)程,然后調(diào)用chdir并將分割數(shù)組的參數(shù)部分作為參數(shù)傳遞給chdir。4.pwd在輸入并分割成數(shù)組后,還確定它是pwd命令。分叉一個(gè)新進(jìn)程,然后調(diào)用系統(tǒng)(pwd)。該命令也可用于驗(yàn)證上述cd命令是否正確執(zhí)行。5.出口執(zhí)行子函數(shù)根據(jù)用戶按網(wǎng)格輸入的數(shù)組拆分判斷為退出命令后,返回-1,檢測循環(huán)中執(zhí)行的返回值,如果為-1,則直接返回,退出模擬外殼終端。Sh2.c:實(shí)現(xiàn)了shel

3、l程序,并要求在版本1中添加以下功能實(shí)現(xiàn)文件重定向$ echo hello日志$ cat日志你好想法:根據(jù)sh1.c的描述,如果確定是echo命令,則有必要再次確定“”是否出現(xiàn)在拆分字符串?dāng)?shù)組中。如果是這樣的話,則以“”之前和echo之后的內(nèi)容作為輸出,以“”到“”之后的第一個(gè)空白字符作為文件名,fopen創(chuàng)建文件,fwrite將輸出到文件,并關(guān)閉文件。sh1.c和sh2.c的源代碼:#包括#包括#包括#包括#包括#包括#包括#定義LEN 256#定義WIDTH 256#定義HEIGHT 10空隙分割(充電源,充電目的地高度寬度)char * p;p=strsep(來源 );int I=0;對(duì)

4、于(I=0;pi!= 0;i )dest0I=pI;dest0I= 0;int j=1;而(p)p=strsep(來源 );if(p)對(duì)于(I=0;pi!= 0;i )destjI=pI;destjI= 0;j;int執(zhí)行(char commHEIGHTWIDTH)if(strcmp(comm0, echo)=0)int PID=fork();if(pid=0)int I=0;int=0;對(duì)于(I=1;commi0!= 0;i )if(commI0=)is=1;休息;if(is=1)puts(commI 1);FILE *fp=fopen(通信i 1,w);int j=0;對(duì)于(j=1;(j

5、);獲取(命令);拆分(命令,拆分?jǐn)?shù)組);int I=0;如果(-1=執(zhí)行(splitArray)返回0;Sh3.c:實(shí)現(xiàn)了shell程序,并要求在版本2中添加以下功能實(shí)施管道$ cat /etc/passwd | wc -l實(shí)現(xiàn)管道和文件重定向$ cat輸入. txt321321$ cat output.txt$ cat output.txt123想法:首先讀取用戶輸入,將輸入分成以“|”為分隔符的字符串?dāng)?shù)組,然后在while循環(huán)中依次執(zhí)行以下操作:通過代碼中的pipe()函數(shù)創(chuàng)建管道。創(chuàng)建后,一個(gè)父進(jìn)程和一個(gè)子進(jìn)程只能向管道寫入內(nèi)容,另一個(gè)只能向管道讀取內(nèi)容。然后使用dup()函數(shù)將流程的

6、輸入流或輸出流重定向到流水線,從而實(shí)現(xiàn)流水線的操作。實(shí)現(xiàn)時(shí),請(qǐng)注意,可以使用多個(gè)“|”來迭代管道操作,并且需要一個(gè)循環(huán)來處理它。使用系統(tǒng)執(zhí)行每個(gè)命令,同時(shí)請(qǐng)注意,最后一個(gè)操作的輸出流是標(biāo)準(zhǔn)輸出(即屏幕),不需要重定向到管道中,需要特殊處理。源代碼:#包括#包括#包括#包括#包括#包括#包括#定義LEN 256#定義WIDTH 256#定義HEIGHT 10空隙分割(充電源,充電目的地高度寬度)char * p;p=strsep(來源, | );int I=0;對(duì)于(1=0;pi!= 0;i )目標(biāo)01=p1;目標(biāo)01= 0;int j=1;而(p)p=strsep(來源“|”);if(p)對(duì)于

7、(1=0;pi!= 0;i )目標(biāo)jI=pI;目標(biāo)jI= 0;j;main()茶命令LEN;char SplitArrayHEIGHTWIDTH= 0 ;printf(% s , );獲?。?;拆分(命令,拆分?jǐn)?shù)組);整數(shù)1=0;對(duì)于(1=0;splitArrayi0!= 0;i )puts(拆分?jǐn)?shù)組I);int p2;管道(p);int j=0;對(duì)于(j=0;splitArrayj 10!= 0;j )if (fork()=0) /子進(jìn)程關(guān)閉(0);關(guān)閉(p0)關(guān)閉(p1);dup(p0);系統(tǒng)(SplitArrayj);其他/父進(jìn)程關(guān)閉(1);關(guān)閉(p0)關(guān)閉(p1);dup(p1);

8、系統(tǒng)(SplitArrayj 1);多線程題目pi1.c:使用2個(gè)線程根據(jù)萊布尼茲級(jí)數(shù)計(jì)算PI萊布尼茲級(jí)數(shù)公式: 1 - 1/3 1/5 - 1/7 1/9 -.=/4主線程創(chuàng)建1個(gè)輔助線程主線程計(jì)算級(jí)數(shù)的前半部分輔助線程計(jì)算級(jí)數(shù)的后半部分主線程等待輔助線程運(yùn)行結(jié)束后,將前半部分和后半部分相加思路:計(jì)算公式前1000項(xiàng),主線程計(jì)算前5000項(xiàng),子線程計(jì)算后5000項(xiàng),主進(jìn)程等待子進(jìn)程結(jié)束,通過pthread_join(sub,(void *)結(jié)果);的結(jié)果參數(shù)獲取子進(jìn)程計(jì)算結(jié)果再相加即可。源代碼:#包括#包括#包括#包括#定義LEN 10000結(jié)構(gòu)結(jié)果浮動(dòng)總和;void *subThread(

9、)國際;浮動(dòng)j;結(jié)構(gòu)結(jié)果*結(jié)果;浮點(diǎn)sum1=0,sum2=0,sum=0;對(duì)于(1=LEN/2 1;i=LEN .i )j=i .if(i%2=0)總和1=1/(2 * j-1);/printf(% f n ,總和2);if(i%2=1)總和2=1/(2 * j-1);/printf(% f n ,總和1);總和=總和2-總和1;/printf(% f n ,總和);/printf(% f n ,總和);結(jié)果=malloc(大?。ńY(jié)果);結(jié)果-總和=總和;返回結(jié)果;int main()國際;浮動(dòng)j;浮點(diǎn)sum1=0,sum2=0,sum=0;對(duì)于(I=1;I=LEN/2。i )j=i .if(i%2=0)總和1=1/(2 * j-1);if(i%2=1)總和2=1/(2 * j-1);總和=總和2-總

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論