操作系統(tǒng)-實驗三_第1頁
操作系統(tǒng)-實驗三_第2頁
操作系統(tǒng)-實驗三_第3頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實驗三文件系統(tǒng)的用戶界面一、 實驗?zāi)康倪M一步理解、使用和掌握文件的系統(tǒng)調(diào)用、文件的標(biāo)準(zhǔn)子例程,能利用和選擇這些基本的文件操作完成復(fù)雜的文件處理工作。二、 實驗題目C read(fd, buf, nbytes),write(fdbuf,nbytes)fread(buf,sizenitems,fp),fwrite(buf, sizenitems,fp),編寫一個文件的復(fù)制程序(文件大小1MC 程序來生成,或使用/usr/bin 下的二進制執(zhí)行文件。調(diào)用格式例如: copy file1 file2 #include main(int argc, char*argv)fd1=open(argv

2、1,O_RDONLY);/creat (argv2,0660);fd2=open(argv2, O_WRONLY); while(n=read(fd1, buf, BUFSIZE)0)write(fd2, buf, n);main 帶參的調(diào)用方法例(含測試時間):time./mycpinfileoutfile流文件的實驗程序請參考該程序完成。nbytes, size nitems 1 nbytes 4096 字節(jié),size 1 字nitems 4096 4096 率(文件大小1M)。如:creat open 寫打開該文lseek 將寫指針移到很遠處,寫入隨便一個字符。比方移動0 x100000

3、e 寫個1M x 的n 1 3M 左右的大的執(zhí)行文件。對于單獨使用的速度較快的電腦,文件要 10M100M。編寫一個父子進程之間用無名管道進行數(shù)據(jù)傳送的C 在兩個用戶的獨立程序之間,使用有名管道,重新編寫一個C 程序,實現(xiàn)題2 的功能。三、 源代碼1編寫一個文件復(fù)制的 C 語言程序:分別使用文件的系統(tǒng)調(diào)用 read(fd, nbytes), write(fdbuf, nbytes)fread(buf, sizenitems, fp), fwrite(buf, sizenitems, fp),編寫一個文件的復(fù)制程序。程序一#define BUFSIZE 4096 #include #includ

4、e #include #include int main(int argc, char *argv)printf(這個是一次 4096 個字節(jié)的運行結(jié)果:n);int inputFd, outputFd, n, mode; char bufBUFSIZE;inputFd = open(argv1,O_RDWR|O_CREAT, 0777); outputFd = open(argv2,O_WRONLY|O_CREAT,0777); char str20 = My name is LXC;lseek(inputFd, 1000000, 0); write(inputFd, str, strlen

5、(str); lseek(inputFd, 0, 0);while(n=read(inputFd, buf, BUFSIZE)0) write(outputFd,buf, n);close(inputFd);close(outputFd); return 0;以下為輸出結(jié)果:xcubuntu:$ time ./copy InputData OutputData這個是一次一個字節(jié)的運行結(jié)果realuser syslxcubuntu:$ gcc CopyFile.c -o copy lxcubuntu:$ time ./copy InputData OutputData 這個是一次 4096 個字

6、節(jié)的運行結(jié)果:realuser syslxcubuntu:$程序二#define BUF_SIZE 1#include #include int main(int grgc, char *argv)printf(1 個字節(jié)FILE *inputFp,* outputFp;inputFp = fopen(argv1,r+); outputFp = fopen(argv2,w+); char BUFBUF_SIZE;while (!feof(inputFp)fread(BUF, BUF_SIZE, 1, inputFp); fwrite(BUF, BUF_SIZE, 1, outputFp); f

7、getc(inputFp);fclose(inputFp); fclose(outputFp);以下為輸出結(jié)果lxcubuntu:$ gcc CopyFileV2.c -o copy lxcubuntu:$ time ./copy InputData OutPutData 這個是一次讀取 4096 個字節(jié)realuser syslxcubuntu:$ gcc CopyFileV2.c -o copy lxcubuntu:$ time ./copy InputData OutPutData 這個是一次讀取 1 個字節(jié)realuser syslxcubuntu:$2C一個文件的內(nèi)容,并通過管道發(fā)送

8、給子進程。子進程從管道中讀出信息,再將其寫入一個新的文件。程序結(jié)束后,對原文件和新文件的內(nèi)容進行比較。程序#define BUFF_SIZE 1024 #include #include #include int main(int argc, char *argv)int sfd, dfd, n, chan2; char buffBUFF_SIZE;sfd = open(InputData, O_RDONLY, 0644);dfd = open(OutputData, O_WRONLY|O_CREAT|O_TRUNC, 0644); pipe(chan);if(fork()close(chan

9、0);while(n = read(sfd, buff, BUFF_SIZE)0)write(chan1, buff, n);close(chan1);close(chan1);read(chan0, buff,BUFF_SIZE); write(dfd, buff, strlen(buff); close(chan0);close(sfd); close(dfd); return 0;以下為輸出結(jié)果:3、在兩個用戶的獨立程序之間,使用有名管道,重新編寫一個C 程序,實現(xiàn)題2 的功能。程序:寫管道端#define BUFSIZE 256 #include #include #include #

10、include int main(int argc, const char *argv)int writeFifoFd, inputDataFd, n; char bufBUFSIZE; mknod(fifo,S_IFIFO|0666,0);writeFifoFd = open(fifo,O_WRONLY); inputDataFd = open(InputData.txt,O_RDONLY); while(n=read(inputDataFd, buf, BUFSIZE)0)write(writeFifoFd,buf,n); close(inputDataFd); close(writeFi

11、foFd);return 0;讀管道端#define BUFSIZE 256 #includeint main(int argc, const char *argv)int readFifoFd, outputDataFd, n; char bufBUFSIZE;readFifoFd = open(fifo,O_RDONLY);outputDataFd = open(OutputData.txt, 0644); while(n = read(readFifoFd, buf, sizeof(buf)!=0)write(outputDataFd,buf,n); close(readFifoFd);

12、 close(outputDataFd);return 0;運行結(jié)果Unix實用程序一、實驗?zāi)康腢nix shell 命令,正則表達式和過濾器程序的使用。二、實驗題目,file,chown,chmode,head,taill,find等命令。lsl 和兩個命令。請將第一個ls 有何不同?并加以解釋。比較ls,ls* ,ls.,ls.*,ls.?*這些命令的輸出有何不同?以下兩條命令:mvfile1file2cpfile1file2;rmfile1的執(zhí)行效果是否總是相同的?請仔細推敲并上機驗證提示:如是軟連接如何。c 源程序名。grep、awk 命令。按相反的次序顯示輸入行及行號。統(tǒng)計輸入單詞的

13、頻度。df,du,tar 命令。ps,time,nohub 命令。compress,gzip man 等命令。三、實驗結(jié)果(一)上機練習(xí) ls,ln,ln s,file,chown,chmode,head,taill,find等命令。lsl 和兩個命令。請將第一個ls 命令的輸出和第二個命令的輸出文件中的內(nèi)容作仔細比較。兩者有何不同?并加以解釋。ln:創(chuàng)建軟連接;chown: 更改某個文件或目錄的所有者,如:chown chmod: 設(shè)置文件或目錄的默認權(quán)限的命令,如:head: head n 2 test.txttaill: 用戶想查看文件的尾部,如:tail n 2 test.txtfin

14、d:查找文件,如:find/etcinamepasswd-rw-rw-r- 1 lxc lxc 581-rw-rw-r- 1 lxc lxc 5815 月-rw-rw-r- 1 lxc lxc 3985 月 21 18:52 CopyFile.c-rw-rw-r- 1 lxc lxc 4115 月-rw-rw-r- 1 lxc lxc 3705 月-rw-rw-r- 1 lxc lxc 5705 月-rw-rw-r- 1 lxc lxc 4405 月ls l 的結(jié)果總用量 24-rw-rw-r- 1 lxc lxc 5815 月-rw-rw-r- 1 lxc lxc 3985 月 21 18:

15、52 CopyFile.c-rw-rw-r- 1 lxc lxc 4115 月-rw-rw-r- 1lxclxc05 月-rw-rw-r- 1 lxc lxc 3705 月-rw-rw-r- 1 lxc lxc 5705 月-rw-rw-r- 1 lxc lxc 4405 月ls 的結(jié)果多了一個空文件 e。e 是輸出重定向。比較ls,ls* ,ls.,ls.*,ls.?*這些命令的輸出有何不同?以下兩條命令:mvfile1file2cpfile1file2;rmfile1 推敲并上機驗證提示:如是軟連接如何答:一樣,mvfile1file2 的功能是把file1 文件名更改成file2,cpf

16、ile1file2;rmfile1 軟連接的功能也一樣。C 源程序名。答:find. -name*.c -mtime -24(二)掌握正則表達式的匹配規(guī)則,上機練習(xí)、awk 命令。按相反的次序顯示輸入行及行號。lxcubuntu:$ grep -n a Test|sort-r 6:a5:ab4:abc 3:abcd 2:abcde 1:abcdef統(tǒng)計輸入單詞的頻度。lxcubuntu:$awkfor(i=1;i=NF;i+)a$i+ENDfor(iinprint i=aiTestab=2 abcdef=1 abc=2 a=1 abcd=1 abcde=1(三)上機練習(xí) df,du,tar 命令。df:顯示指定磁盤文件的可用空間 dutar:解壓或壓縮文件。解壓:tar zxvf,壓縮:tar cvf filename.tar filename(四)上機練習(xí) ps,time,nohub 命令。ps:列出系統(tǒng)中當(dāng)前運行的那些進程time:用于測量一個命令的運行時常nohop:切換到后臺執(zhí)行(五)上機練習(xí) man 命令。幫助文

溫馨提示

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

評論

0/150

提交評論