Linux程序設計實驗報告(ahut)_第1頁
Linux程序設計實驗報告(ahut)_第2頁
Linux程序設計實驗報告(ahut)_第3頁
Linux程序設計實驗報告(ahut)_第4頁
Linux程序設計實驗報告(ahut)_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《Linux程序設計》實驗報告安徽工業(yè)大學計算機學院2023年6月實驗一Linux根本命令的使用1、實驗目的

學習和掌握Linux的根本命令。2、實驗內容和步驟步驟1:以user_login用戶身份并使用telnet登錄Linux效勞器,按照提示創(chuàng)立自己的賬戶和口令。步驟2:使用新創(chuàng)立的用戶賬戶和口令登錄Linux系統(tǒng),觀察登錄后的界面。步驟3:使用pwd命令觀察當前的工作目錄,然后用ls命令查看當前目錄下的內容,嘗試使用-a,-l,-F,-A,-lF等不同選項并比擬不同之處。

步驟4:在當前目錄下建立一個名為test的新目錄,然后將工作目錄切換到test下,嘗試將/etc目錄下的文件passwd拷貝到該目錄下〔cp源文件目的目錄〕。觀察當前目錄下的passwd文件的屬主和文件權限。步驟5:嘗試向當前目錄下的passwd文件和/etc/passwd文件分別寫入一些新內容〔可使用echo“字符串〞>>文件的命令〕,看看操作能否成功,如果不能成功,請說明原因。用cat命令瀏覽文件password的內容,用more命令進行瀏覽翻頁操作,再用less命令瀏覽文件的內容。比擬這幾個命令的不同之處步驟6:用ls命令查看test下文件的權限,用mv命令更改文件password的文件名為test.txt,嘗試用chown和chgrp更改文件的屬主為root、組為root,看看能否成功,不成功,請說明原因。嘗試用chomd將文件權限為“-rw-------〞??纯茨芊癯晒?,不成功,請說明原因。步驟7:用rm命令刪除test目錄下的所有文件,再用rmdir命令刪除test目錄。

〔想一想有沒有一條命令將目錄及目錄下的所有文件刪除,寫出這條命令〕步驟8:使用ps命令查看當前系統(tǒng)內的進程,并利用man命令獲取ps命令的參數,寫出獲取當前終端進程執(zhí)行情況的ps命令。步驟9:使用df命令查看當前系統(tǒng)已安裝的文件系統(tǒng)的空間使用情況,記錄結果。______________________________________________________________________________________________________________________________________________________________步驟10:使用du命令查看用戶的工作目錄占用了多少空間,記錄結果。步驟11:使用free命令查看內存資源的使用情況,記錄結果。________________________________________________________________________________步驟12:使用man獲取tar和gzip的幫助信息,嘗試將test目錄下的文件打包并壓縮,然后到另外一目錄tmp下解包,寫出這幾條命令。步驟13:嘗試執(zhí)行“l(fā)s–l>tmp〞,看看這條命令的執(zhí)行會出現什么結果,解釋一下這條命令。解釋:將ls–l輸出的結果輸出重定向到tmp文件中步驟14:嘗試執(zhí)行find/usr/src-name*.c-print|xargsgrep“#include〞,看看這條命令的執(zhí)行會出現什么結果,解釋一下這條命令。解釋:匹配查找列表輸出/usr/src下以.c結尾的文件中含有“#include〞的內容。步驟15:執(zhí)行cal和date命令,說說這兩條指令的用途。cal:輸出當月的日歷,date:輸出當前的時間。步驟16:執(zhí)行命令clear和logout,退出系統(tǒng)。〔想一想有沒有其他的方法,寫出這種方法〕還可以用命令:exit步驟17:執(zhí)行命令shutdown,關閉系統(tǒng)?!蚕胍幌胗袥]有更簡單的命令,寫出這條命令〕還可以用命令:init03、實驗結論通過本次試驗讓我熟悉了linux系統(tǒng)下一些簡單命令的用法,對系統(tǒng)有個初步的認識,為以后的學習墊下良好的根底,增強了自己對linux的濃厚的興趣。實驗二簡單Shell程序設計1、實驗目的

學習和掌握vi編輯器的根本使用方法。學習和掌握編寫簡單的shell程序。2、實驗內容和步驟2.1vi的使用步驟1:以root用戶身份登錄進入Linux

系統(tǒng)。步驟2:啟動Vi,切換到輸入模式,輸入一段英文:This

ia

an

exercise!

We

use

Vi

to

edit

it.

Left,down,up,right

步驟3:嘗試匹配其中的一串字符,寫出這命令及執(zhí)行結果。步驟4:嘗試替換其中的一串字符,寫出這命令及執(zhí)行結果。步驟5:嘗試復制/刪除其中的一行或幾行文本,寫出命令及執(zhí)行結果。步驟6:嘗試復制/刪除其中的一個單詞或幾個字符,寫出命令及執(zhí)行結果。步驟7:嘗試使用鼠標復制文本,寫出命令及執(zhí)行結果。步驟8:嘗試存盤退出操作,寫出命令??梢杂玫拿睿簑q或:x2.2簡單的shell程序步驟1:使用Vi將程序清單2-1的程序輸入。步驟2:嘗試運行該程序,如果不能運行,原因是什么,怎樣修改。步驟3:執(zhí)行程序,寫出程序的執(zhí)行結果。步驟4:閱讀程序,掌握shell函數的編寫方法,補全函數file_run。foriin`ls`doiftest-x$i;thenecho$ifidone步驟5:修改程序中的函數uers(),使得顯示在線用戶時不分行?!蔡崾荆嚎梢允褂醚h(huán),對每個在線用戶分別處理。echo"thereare`who|wc-l`usersonline"foriin"whoare\n`who|awk'{print$1}'`"doecho-n$iecho-n""done3、實驗結論本次實驗讓我在實驗一的根底上進一步了解linux下的一些常用命令,同時學習穩(wěn)固了linux下的shell編程。4、程序清單清單2-1menuMYDATE=`date+%d/%m/%y`THIS_HOST=`hostname-s`USER=`whoami`file_run(){echo"youmustcompleteit"}uers(){echo"thereare`who|wc-l`usersonline"echo-e"whoare\n`who|awk'{print$1}'`"}while:do tputclear cat<<aaa---------------------------------------------------------------------User:$USER Host:$THIS_HOST Date:$MYDATE--------------------------------------------------------------------- 1:Listsubdirectoryincurrentdirectory 2:Listfilesincurrentdirectorywhichcanrun 3:Seewhoisonthesystem H:Helpscreen Q:ExitMenu--------------------------------------------------------------------aaa echo-e-n"\tYourChoice[1,2,3,H,Q]>"readCHOICE case$CHOICEin 1)ls-l|awk'/^d/{print$8}' ;; 2)file_run ;; 3)uers ;; H|h) cat<<aaaThisisthehelpscreen,nothinghereyettohelpyou!aaa;; Q|q)exit0 ;; *)echo-e"\t\007unkownuserresponse";; esac echo-e-n"\n\n\tHitthereturnkeytocontinue"readDUMMYdone實驗三Linux下簡單C程序設計與文件操作1、實驗目的

學習和掌握gcc等Linux的開發(fā)調試環(huán)境。學習并掌握Linux的文件操作。編寫并實現實驗步驟6要求的程序。2、實驗內容和步驟步驟1:使用Vi將程序清單3-1和3-2的程序輸入,并在當前目錄下創(chuàng)立文件“file.in〞和文件“file.out〞,盡可能的使文件“file.in〞大一些。步驟2:利用gcc分別編譯這兩個程序,寫出編譯命令和執(zhí)行結果,如果不成功,嘗試利用gdb調試。Gcc–olist3_1list3_1.cGcc–olist3_2list3_2.c步驟3:仔細觀察這兩個程序,比擬標準C的文件操作和Linux的系統(tǒng)調用open、read、write等的使用區(qū)別。答:一個是底層的系統(tǒng)調用,另一個是庫函數調用,其效率略有差距,同時參數也不同。步驟4:按照說明重新修改程序3-2,并使用time命令觀察程序執(zhí)行的時間效率上有何區(qū)別。修改之前的系統(tǒng)時間:[root@localhost~]#time./list3_2real0m18.791suser0m0.824ssys0m17.317s修改之后的時間:___[root@localhost~]#time./list3_2real0m0.049suser0m0.000ssys0m0.036s步驟5:輸入、編譯并運行程序3-3和3-4,寫出執(zhí)行結果,并比擬他們fseek和lseek在使用方法上的異同程序3的運行結果是:在root目錄下創(chuàng)立了文件hole.file而且文件的內容為:abcdefghij步驟6:學習并分別使用標準C的文件操作函數和Linux的系統(tǒng)調用創(chuàng)立一個對學生根本信息進行操作〔插入、修改和刪除〕的C程序,學生根本信息以結構體的形式存儲在文件中,structstu_info的定義如下:structstu_info{ charstu_num[12]; charname[10]; shortintsex;/*0為女生,1為男生*/ charmobile_phone[12];};3、實驗結論掌握了linux下的簡單c語言編程。4、程序清單//程序清單3-1#include<stdio.h>#include<stdlib.h>intmain(void){charc;FILE*in,*out;if((in=fopen("file.in","r"))==NULL){ perror("fileopenerror!"); exit(0);}out=fopen("file.out","w");while((c=fgetc(in))!=EOF)fputc(c,out);}//程序清單3-2#include<unistd.h>#include<sys/stat.h>#include<fcntl.h>intmain(){//charblock[1024];charc;intin,out;intnread;in=open("file.in",O_RDONLY);out=open("file.out",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);//將注釋翻開,并將兩條語句的后一句注釋掉,重新編譯執(zhí)行。//while((nread=read(in,block,sizeof(block)))>0)while((nread=read(in,&c,sizeof(c)))>0)//write(out,block,nread);write(out,&c,nread);}//程序清單3-3#include<stdio.h>#include<unistd.h>#include<fcntl.h>#include<sys/stat.h>#include<sys/types.h>charbuf1[]="abcdefghij";charbuf2[]="ABCDEFGHIJ";voiderr_exit(char*err_s){ perror(err_s); exit(1);}intmain(void){FILE*fp; if((fp=fopen("hole.file","w"))==NULL) err_exit("fileopenfail!"); if(fwrite(buf1,sizeof(buf1),1,fp)!=1) err_exit("filewritebuf1error!"); if(fseek(fp,40,SEEK_SET)==-1) err_exit("fseekerror!"); if(fwrite(buf2,strlen(buf2),1,fp)!=1) err_exit("filewritebuf2error!"); fclose(fp);}//程序清單3-4#include<stdio.h>#include<unistd.h>#include<fcntl.h>#include<sys/stat.h>#include<sys/types.h>charbuf1[]="abcdefghij";charbuf2[]="ABCDEFGHIJ";voiderr_exit(char*err_s){ perror(err_s); exit(1);}intmain(void){intfd; if((fd=open("hole.file",O_WRONLY|O_CREAT/*|O_APPEND,0644*/))==-1) err_exit("fileopenfail!"); if(write(fd,buf1,10)!=10) err_exit("filewritebuf1error!"); if(lseek(fd,40,SEEK_SET)==-1) err_exit("lseekerror!"); if(write(fd,buf2,10)!=10) err_exit("filewritebuf2error!");}實驗四Linux下進程操作與進程間通信1、實驗目的

學習和掌握fork等系統(tǒng)調用的根本使用方法。利用Linux中的管道實現父子進程間的同步。2、實驗內容與步驟步驟1:使用Vi將程序清單4-1的程序輸入、編譯并運行,學習和掌握fork的根本調用方法。步驟2:使用Vi將程序清單4-2、4-3和4-4的程序輸入、利用gcc分別編譯這三個程序,寫出編譯命令和編譯結果,如果不成功,嘗試利用gdb調試。[root@localhost~]#gcc-o4_24_2.c4_2.c:43:2:warning:nonewlineatendoffile[root@localhost~]#./4_2childfailed.4-3[root@localhost~]#gcc-ofatherfather.cfather.c:Infunction`main':father.c:7:error:`l'undeclared(firstuseinthisfunction)father.c:7:error:(Eachundeclaredidentifierisreportedonlyoncefather.c:7:error:foreachfunctionitappearsin.)father.c:8:error:stray'\129'inprogramfather.c:8:error:syntaxerrorbeforenumericconstantfather.c:8:error:stray'\132'inprogramfather.c:10:2:warning:nonewlineatendoffile[root@localhost~]#gcc-ochildchild.cchild.c:7:2:warning:nonewlineatendoffile[root@localhost~]#./childhellohellochild,child.步驟3:寫出編譯這三個程序的makefile,然后利用make進行編譯,談談這么做的好處??梢怨?jié)省勞動時間,讓三個程序同時編譯,簡化了操作。步驟4:運行這三個程序,寫出運行結果。4-2的運行結果:4_2.c:43:2:warning:nonewlineatendoffile[root@localhost~]#./4_2Parentisusingpipewrite.child,child.____________4-3的運行結果:[root@localhost~]#./fatherParentisusingpipewrite.4-4的運行結果是:________[root@localhost~]#./childhellochild!hellochild!child,child.步驟5:屏幕上顯示出的執(zhí)行結果是哪一個進程執(zhí)行的結果?Father.c步驟6:父進程中的printf有向屏幕輸出嗎?為什么?沒有,因為父進程的標準輸出已經被重定向。步驟7:利用父子進程間的管道通信方式,改寫實驗3步驟6要求的程序。要求啟用兩個進程,其中父進程接受用戶對文件的操作命令然后通過管道發(fā)給子進程,子進程完成對文件的實際操作。3、實驗結論學習了進程的操作方法,了解了dup的工作原理。4、程序清單//程序清單4-1#include<unistd.h>#include<stdio.h>#include"err_exit.h"intglobal=5;intmain(void){ pid_tpid; char*string="thesearevaluesbeforefork:"; intlocal=10; printf("beforefork***\n\n"); if((pid=fork())<0) err_exit("forkerror"); if(pid==0){ string="Iamchild."; printf("\nMypidis%d,%s\n""pid=%d\nglobal=%d\nlocal=%d\n",getpid(),string,pid,global,local); global++; } else{ string="Iamparent."; printf("\nMypidis%d,%s\n""pid=%d\nglobal=%d\nlocal=%d\n",getpid(),string,pid,global,local); local++; } printf("%s\nNow,global=%d,local=%d\n",string,global,local); exit(EXIT_SUCCESS);}//清單4-2管道程序#defineSTD_INPUT0 //定義標準輸入設備描述符#defineSTD_OUTPUT1 //定義標準輸出設備描述符intfd[2];main(){staticcharprocess1[]=〞father〞,process2[]=〞child〞; pipe(fd); //定義管道 pipeline(process1,process2); //調用自定義函數pipeline() exit(1); //程序結束}pipeline(char*process1,char*process2){inti; if((i=fork())==-1) //創(chuàng)立進程,失敗退出 { perror(“processforkerror!〞); exit(1); } if(i) { close(fd[0]);

溫馨提示

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

評論

0/150

提交評論