




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Linux 實驗報告姓名黃芳愷班級軟件工程114學號119074258指導教師阮越目錄實驗一 Linux基本命令的使用實驗二簡單 Shell程序設計實驗三 Linux下簡單 C 程序設計與文件操作實驗四 Linux下進程操作與進程間通信實驗五 Linux線程的使用實驗六 Linux進程間的 IPC實驗七 Linux下訪問 Mysql 數據庫實驗八 Linux下網絡編程練習題: grep、 bash、生產者消費者實驗一 Linux基本命令的使用1、實驗目的學習和掌握 Linux 的基本命令。2、實驗內容和步驟步驟 1:以user_login用戶身份并使用telnet登錄Linux服務器,按照提示
2、創建自己的賬戶和口令。步驟2 :使用新創建的用戶賬戶和口令登錄Linux系統,察看登錄后的界面。步驟 3:使用 pwd 命令察看當前的工作目錄,然后用ls命令查看當前目錄下的內容,嘗試使用 -a,-l,-F,-A,-lF等不同選項并比較不同之處。-a do not ignore entries starting with-I, -ignore=PATTERNdo not list implied entries matching shell PATTERN-luse a long listing format-F, -classifyappend indicator (one of */=|)
3、 to entries-A, -almost-alldo not list implied . and .-lFignore file步驟 4:在當前目錄下建立一個名為test的新目錄,然后將工作目錄切換到test下,嘗試將/etc 目錄下的文件 passwd 拷貝到該目錄下( cp 源文件 目的目錄)。察看當前目錄下的 passwd 文件的屬主和文件權限。步驟 5:嘗試向當前目錄下的passwd 文件和 /etc/passwd文件分別寫入一些新內容(可使用echo “字符串”文件的命令),看看操作能否成功,如果不能成功,請說明原因。用cat命令瀏覽文件 password 的內容,用 more
4、 命令進行瀏覽翻頁操作 , 再用 less 命令瀏覽文件的內容。比較這幾個命令的不同之處對當前目錄中成功,因為該目錄下的passwd 文件對當前用戶具有寫的權限。文件的操作被拒絕因為對當前用戶不具有寫的權限對 /etc/passwdcat 命令將文件的內容全部顯示,more 命令將文件內容分屏顯示,less 命令進行刷新的全部顯示步驟6:用 ls 命令查看test下文件的權限,用mv命令更改文件password 的文件名為test.txt,嘗試用 chown 和 chgrp 更改文件的屬主為root 、組為 root ,看看能否成功, 不成功,請說明原因。嘗試用chomd將文件權限為“-rw-
5、”。看看能否成功,不成功,請說明原因。用 chown 和 chgrp 更改文件的屬主為 root 、組為 root ,不成功。因為 chown 和 chgrp 一般是 root 的權限步驟 7:用 rm 命令刪除test目錄下的所有文件,再用rmdir命令刪除test目錄。(想一想有沒有一條命令將目錄及目錄下的所有文件刪除,寫出這條命令)rm -rf test步驟 8:使用 ps 命令查看當前系統內的進程,并利用取當前終端進程執行情況的 ps 命令。man命令獲取ps命令的參數,寫出獲步驟 9:使用 df 命令查看當前系統已安裝的文件系統的空間使用情況,記錄結果。步驟 10:使用 du 命令查
6、看用戶的工作目錄占用了多少空間,記錄結果。步驟 11:使用 free命令查看內存資源的使用情況,記錄結果。步驟 12:使用 man獲取 tar和 gzip 的幫助信息,嘗試將test目錄下的文件打包并壓縮,然后到另外一目錄tmp 下解包,寫出這幾條命令。步驟 13:嘗試執行“ ls l tmp ”,看看這條命令的執行會出現什么結果,解釋一下這條命令。創建一個名為tmp的文件并將ls -l輸出的內容寫入tmp中步驟14:嘗試執行find /usr/src -name *.c -print | xargs grep“#include”,看看這條命令的執行會出現什么結果,解釋一下這條命令。匹配查找列
7、表輸出/usr/src下以 .c 結尾的文件中含有“ #include ”的內容步驟 15:執行 cal 和 date 命令,說說這兩條指令的用途。步驟 16:執行命令clear和 logout ,退出系統。(想一想有沒有其他的方法,寫出這種方法)Exit步驟 17:執行命令shutdown ,關閉系統。(想一想有沒有更簡單的命令,寫出這條命令)Init 03、實驗結論通過對 linux的常用命令的學習,讓我對linux的系統有了初步的認識- 這是一個完全基于命令操作的操作系統,這些命令組成了強大的命令系統,提供了完善的功能。這些命令操作將為我以后的linux學習打下良好的基礎。實驗二簡單 S
8、hell程序設計1、實驗目的(1) 學習和掌握 vi 編輯器的基本使用方法。(2) 學習和掌握編寫簡單的shell程序。2、實驗內容和步驟2.1 vi的使用步驟 1:以 root用戶身份登錄進入Linux系統。步驟 2 :啟動 Vi ,切換到輸入模式,輸入一段英文:This ia an exercise!We use Vi to edit it.Left,down,up,right步驟 3:嘗試匹配其中的一串字符,寫出這命令及執行結果。:/Left步驟 4:嘗試替換其中的一串字符,寫出這命令及執行結果。:3s/Left/123/g步驟 5:嘗試復制 / 刪除其中的一行或幾行文本,寫出命令及執行
9、結果。命令模式下,光標移動到那一行按”nyy ”為(n要復制的行數)再按 p粘貼。命令模式下,光標移動到那一行按”ndd ”為(n要刪除的行數)刪除一行或幾行。步驟 6:嘗試復制 / 刪除其中的一個單詞或幾個字符,寫出命令及執行結果。命令模式下,光標移動到那一行按”nyw ”為(n要復制的單詞數)再按 p粘貼。命令模式下,光標移動到那一行按”ndw ”為(n要刪除的單詞數)刪除一個或幾個字符。步驟 7:嘗試使用鼠標復制文本,寫出命令及執行結果。直接使用鼠標選中復制,將光標移動到要粘貼的地方用鼠標粘貼即可完成復制文本。步驟 8:嘗試存盤退出操作,寫出命令。:wq2.2簡單的 shell程序步驟
10、1:使用 Vi 將程序清單2-1 的程序輸入。步驟 2 :嘗試運行該程序,如果不能運行,原因是什么,怎樣修改。沒有執行權限chmod +x test步驟 3:執行程序,寫出程序的執行結果。步驟 4:閱讀程序,掌握shell函數的編寫方法,補全函數file_run。file_run()ls -l | awk /-(.x)+/ print $9步驟 5:修改程序中的函數 uers() ,使得顯示在線用戶時不分行。(提示:可以使用循環,對每個在線用戶分別處理。)uers()echo there are who|wc -l users onlineecho who arefor i in $(who
11、| awk print $1);doprintf %s $idoneecho3、實驗結論Linux 系統 shell 編程其本質就是linux 命令的組合,通過許多簡單命令的組合可以完成很多功能,可以開發一些小型程序。實驗三 Linux下簡單 C程序設計與文件操作1、實驗目的(3) 學習和掌握 gcc 等 Linux 的開發調試環境。(4) 學習并掌握 Linux 的文件操作。(5) 編寫并實現實驗步驟6 要求的程序。2、實驗內容和步驟步驟 1:使用 Vi 將程序清單 3-1 和 3-2 的程序輸入,并在當前目錄下創建文件“ file.in ” 和文件“ file.out ”,盡可能的使文件“
12、 file.in ”大一些。步驟 2 :利用 gcc 分別編譯這兩個程序,寫出編譯命令和執行結果,如果不成功,嘗試利用gdb 調試。gcc o list3_1 list3_1.cgcc o list3_2 list3_2.c步驟 3:仔細觀察這兩個程序, 比較標準 C 的文件操作和 Linux 的系統調用 open、read 、write等的使用區別。答:標準c 的文件操作一個是庫函數的調用,linux中系統調用文件操是底層的文件調用,其運行效率略有差距,同時參數也不同, 返回的數據類型也不同。步驟 4:按照說明重新修改程序3-2 ,并使用 time 命令察看程序執行的時間效率上有何區別。步驟
13、 5:輸入、編譯并運行程序 3-3 和 3-4 ,寫出執行結果,并比較他們 fseek 和 lseek 在使用方法上的異同兩者都是對文件的讀寫指針進行設置但兩者的返回類型不同,fseek 返回的是int型 lseek返回的是off_t型步驟 6:學習并分別使用標準C 的文件操作函數和Linux 的系統調用創建一個對學生基本信息進行操作(插入、修改和刪除)的C 程序,學生基本信息以結構體的形式存儲在文件中, struct stu_info的定義如下:struct stu_info char stu_num12;char name10;short int sex;/*0為女生, 1
14、 為男生 */char mobile_phone12;3、實驗結論通過對文件操作的編程,讓我掌握了文件的創建,打開,讀寫,以及特定位置的讀寫關閉等操作。并且從系統底層調用和標準 c 函數庫兩個角度對文件的操作比較中,認識到兩者的異同。實驗四 Linux下進程操作與進程間通信1、實驗目的(1) 學習和掌握 fork 等系統調用的基本使用方法。(2) 利用 Linux 中的管道實現父子進程間的同步。2、實驗內容與步驟步驟1:使用Vi將程序清單4-1的程序輸入、編譯并運行,學習和掌握fork的基本調用方法。步驟 2 :使用 Vi 將程序清單4-2 、 4-3 和 4-4的程序輸入、利用gcc分別編譯
15、這三個程序,寫出編譯命令和編譯結果,如果不成功,嘗試利用gdb 調試。gcc -o list4_2 list4_2.cgcc -o father father.cgcc -o child child.c步驟 3:寫出編譯這三個程序的makefile,然后利用 make 進行編譯,談談這么做的好處。可以節省勞動時間,讓三個程序同時編譯,簡化了操作。步驟 4:運行這三個程序,寫出運行結果。步驟 5:屏幕上顯示出的執行結果是哪一個進程執行的結果?father和 child步驟 6:父進程中的printf有向屏幕輸出嗎?為什么?沒有,因為父進程的標準輸出已經被重定向。步驟 7:利用父子進程間的管道通信
16、方式,改寫實驗3 步驟 6 要求的程序。3、實驗結論通過該節實驗,我更進一步理解了fock 函數 dup 函數 exercl 函數的工作原理,讓我了解到了進程并發的概念。學習了如何創建子進程,進程映象替換,以及通過無名管道實現父子進程中的輸入輸出重定向實驗五 Linux線程的使用1、實驗目的學習和掌握 Linux 線程的創建以及同步方法。2、實驗內容和步驟步驟 1:輸入程序5-1 ,編譯并運行寫出執行結果。thread_function is running.Argument was 10Waiting for thread to finish.Thread joined,it returne
17、d Thank you for the CPU timeshare_int is now -10步驟 2 :仔細研讀代碼,描述 pthread_create 函數中各個參數的意義,并給出線程的入口函數的調用方法,描述兩線程間參數傳遞的方式。該函數有四個參數, 第一個參數為一個指向 pthread_t類型數據的指針, 第二個參數為創建線程的屬性,一般用 NULL 表示用默認屬性,第三個參數為指向要調用函數的函數指針,第四個參數是傳給該函數的參數。參數傳遞方式:首先線程的函數要定義成 void *(*start_routine)(void*) 的形式, 主線程創建子線程時可將要傳給子線程的信息放在
18、 pthead_create函數的第四個參數上,子線程創建后就可以通過函數的參數直接獲得(為一個 void類型的指針) 。步驟 3:打開注釋掉的全局變量aa 及操作 aa 的相關代碼,回答這跟進程有什么不同。由于線程是共享進程內資源的,所以子線程如果改變了aa的值,主線程內aa的值也會發生改變,而如果是創建了一個子進程,若子進程改變了 aa的值,主進程內 aa的值是沒有發生改變的。步驟 4:輸入程序5-2 ,編譯并運行,寫出運行結果。Input some text,Enter end to finishbasjkYou input 5 charactersendWaiting for thre
19、ad to finish.Thread joined步驟 5:仔細研讀代碼,描述利用信號量實現線程間同步調用方法。定義一個全局的 sem_t類型的變量, 通過函數 sem_init(&bin_sem,0,0) 初始化信號量, sem_wait 函數相當于 P操作, sem_post函數相當于 V 操作,改程序的實質其實是一個生產者消費者問題。注:int sem_init(sem_t *sem, int pshared, unsigned int value);The value argument specifies the initial value for the semaphore.If
20、pshared has the value 0, then the semaphore is shared between the threads of a process.If pshared is nonzero, then the semaphore is shared between processes.步驟 6:學習并使用線程間的同步方法,重新改寫實驗 3步驟 6要求的程序。要求啟用兩個線程,其中主線程接受用戶對文件 的操作命令然后發給子線程, 子線程完成對文件的實際操作(注意線程間的同步)。3、實驗結論通過本節實驗學習了如何創建線程,如何在線程之間傳遞參數已經共享
21、數據,以及如何利用信號量同步線程。如何在線程之間傳遞參數已經共享數據,以及如何利用信號量同步線程。實驗六 Linux進程間的 IPC1、實驗目的學習和掌握 Linux 進程間的 IPC 及同步方法。2、實驗內容和步驟步驟 1:輸入程序6-1 ,6-2 編譯并運行寫出執行結果。步驟 2 :仔細研讀代碼,寫出程序中實現P、V 操作的相關函數和代碼,描述程序的同步工作過程。上述代碼實現多個進程讀寫臨界區時,使用信號量進行同步的例子,讀臨界區時先P 操作,出臨界后 V 操作,上面結果中O 與 X 的出現都是成隊的。步驟 3:輸入程序6-3 和 6-4 ,編譯執行并寫出結果。步驟 4:程序 6-3 和
22、6-4 中哪段代碼實現了共享,描述實現內存共享的主要函數的參數意義和這些函數的使用方法。int shmget(key_t key, size_t size, int shmflg);/向系統申請一塊共享內存void *shmat(int shmid, const void *shmaddr, int shmflg); / 將共享內存掛載到 shmaddr 指針上 int shmdt(const void *shmaddr); / 卸載共享內存int shmctl(int shmid, int cmd, struct shmid_ds *buf);/刪除共享內存以及其他控制shmctl(shmi
23、d, IPC_RMID, 0);步驟 5:學習并使用 IPC中信號量和共享內存的使用方法,重新改寫實驗3步驟 6要求的程序。要求啟動多個進程,每一個進程都可以單獨對文件進行操作,進程間通過信號量進行同步,對文件的操作映射到共享內存中。3、實驗結論通過對改節實驗,讓我了解了進程IPC 信號量訪問臨界區,以及進程之間訪問共享內存的實現方法和同步機制,掌握了上述一系列函數的使用方法。IPC用于完成進程間通信,包括信號量,共享內存已及消息隊列,在編寫linux 程序時非有用實驗七 Linux下訪問 Mysql 數據庫1、實驗目的學習和掌握 Mysql 數據庫及編程訪問方法。2、實驗內容和步驟步驟 1:
24、在 Mysql 中使用 sql 命令 create database foo命令創建數據庫foo 。步驟 2 :在數據庫foo 中創建表children。create table children (childno int(11) not null auto_increment,fname varchar(30),age int(11),primary key (childno);步驟 3:向表 children中插入若干記錄。insert into children values (1,Jenny ,17);Insert into children values (2,Andrew ,13)
25、;Insert into children values (3,Alex ,12);Insert into children values (4,Tom ,11);Insert into children values (5,Jack ,7);Insert into children values (6,Ella ,14);步驟 4:輸入、編譯并運行程序7-1 、 7-2 和 7-3 ,寫出運行結果。步驟 5:學習并使用 C語言訪問 Mysql 的基本方法,重新改寫實驗 3步驟 6要求的程序。要求使用數據庫保存 結構。3、實驗結論通過 mysql.h C 語言可以使用數據庫。
26、通過該節實驗我掌握了linux 下怎么用c 語言進行簡單的數據庫方面的編程。實驗八 Linux下網絡編程1、實驗目的學習和掌握 socket 函數的基本使用方法。2、實驗內容和步驟步驟 1:輸入、編譯并運行程序8-1 和 8-2 ,寫出程序的執行結果。步驟 2 :學習并使用 socket 函數的基本使用方法,完善并重新改寫前幾個實驗實現的程序。要求用戶在客戶端實現數據操作請求的輸入,然后上傳到服務器端完成對數據庫的實際操作。同學在實現時應盡可能的使用前幾個實驗的成果, 即應該包括多線程或多進程、 數據庫以及 socket 等。3、實驗結論通過改節實驗我掌握了 linux 下用 c 語言進行網絡
27、編程。 socket可以實現不同主機間進程的通信,可以編寫出網絡應用程序課堂練習:1.grep:#include #include int main(int argc,char* argv)FILE *fp;char tmp100,c;char* tmp1;int l = 0,line = 1;if(argc3)printf(input wrong!n);return 0;if(!(fp=fopen(argv2,r)printf(cant open file!n);return 0;fscanf(fp,%c,&c);NEW_LINE:while(c!=n&!feof(fp)tmpl=c;l+;
28、fscanf(fp,%c,&c);tmpl=0;tmp1 = tmp;while(l!=0)if(!strncmp(argv1,tmp1,sizeof(argv1)printf(line %d: %sn,line,tmp);l-;tmp1+=sizeof(char);fscanf(fp,%c,&c);line+;if(!feof(fp)goto NEW_LINE;return 1;運行結果:2.bash:#include #include #include #include #include void main()pid_t pid;char arg100;char *parg,*p;int
29、lenth,i,j;printf(mysh#);while(1)j=0;fgets(arg,sizeof(arg),stdin); /fgets 比 gets 多接收一個 LF( 換行 )即 n /gets(arg);if(!strcmp(arg,exitn)return;pid = fork();if(pid=0)lenth=strlen(arg);lenth-;arglenth=0;/printf(%sn,arg);/printf(%dn,arg2);/printf(%dn,lenth);if(lenth=0)return;parg=(char*)malloc(sizeof(char*);
30、*(parg+j)=arg;j+;for(i=0;ilenth-1;i+)if(argi= )argi=0;p=parg+j;p=(char*)malloc(sizeof(char*);*(parg+j)=(arg+i+1);j+;/printf(%s %s %s,parg0,parg1,parg2);execvp(*parg,parg);elsewait(0);printf(mysh#);運行結果:3.生產者消費者:/semaphore&sharememory.c#include #include #include #include #include #include #include #d
31、efine TEXT_SZ 2048struct shared_use_st char some_textTEXT_SZ;union semun int val;struct semid_ds *buf;unsigned short int *array;struct seminfo *_buf;static int set_semvalue(int val,int th);static void del_semvalue(int th);static int semaphore_p(int th);static int semaphore_v(int th);static int sem_i
32、d;int main()int running = 1;void *shared_memory = (void *)0;struct shared_use_st *shared_stuff;int shmid;sem_id = semget(key_t)1234, 2, 0666 | IPC_CREAT);set_semvalue(1,0);set_semvalue(0,1);srand(unsigned int)getpid();shmid = shmget(key_t)1234, sizeof(struct shared_use_st), 0666 | IPC_CREAT); if (sh
33、mid = -1) fprintf(stderr, shmget failedn);exit(EXIT_FAILURE);shared_memory = shmat(shmid, (void *)0, 0);if (shared_memory = (void *)-1) fprintf(stderr, shmat failedn);exit(EXIT_FAILURE);printf(Memory attached at %Xn, (int)shared_memory);shared_stuff = (struct shared_use_st *)shared_memory;while(runn
34、ing) semaphore_p(1);printf(You wrote: %s, shared_stuff-some_text);sleep( rand() % 4 );if (strncmp(shared_stuff-some_text, end, 3) = 0) running = 0;semaphore_v(0);if (shmdt(shared_memory) = -1) fprintf(stderr, shmdt failedn);exit(EXIT_FAILURE);if (shmctl(shmid, IPC_RMID, 0) = -1) fprintf(stderr, shmc
35、tl(IPC_RMID) failedn);exit(EXIT_FAILURE);exit(EXIT_SUCCESS);static int set_semvalue(int val,int th)union semun sem_union;sem_union.val = val;if (semctl(sem_id, th, SETV AL, sem_union) = -1) return(0);return(1);static void del_semvalue(int th)union semun sem_union;if (semctl(sem_id, th, IPC_RMID, sem
36、_union) = -1)fprintf(stderr, Failed to delete semaphoren);static int semaphore_p(int th)struct sembuf sem_b;sem_b.sem_num = th;sem_b.sem_op = -1;sem_b.sem_flg = SEM_UNDO;if (semop(sem_id, &sem_b, 1) = -1) fprintf(stderr, semaphore_p failedn);return(0);return(1);static int semaphore_v(int th)struct s
37、embuf sem_b;sem_b.sem_num = th;sem_b.sem_op = 1;sem_b.sem_flg = SEM_UNDO;if (semop(sem_id, &sem_b, 1) = -1) fprintf(stderr, semaphore_v failedn);return(0);return(1);/semaphore&sharememory1.c#include #include #include #include #include #include #include #define TEXT_SZ 2048struct shared_use_st char s
38、ome_textTEXT_SZ;union semun int val;struct semid_ds *buf;unsigned short int *array;struct seminfo *_buf;static int set_semvalue(int val,int th);static void del_semvalue(int th);static int semaphore_p(int th);static int semaphore_v(int th);static int sem_id;int main()int running = 1;void *shared_memory = (void *)0;struct shared_use_st *shared_stuff;char bufferBUFSIZ;int shmid;sem_id = semget(key_t)1234, 2, 0666 | IPC_CREAT);shmid = shmget(key_t)1234, sizeof(struct shared_use_st), 0666 | IPC_CREAT); if (shmid =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合作合同書修訂版
- 2025年5月陜西省延安市部分學校中考模擬考試九年級數學試卷
- 林業生態保護與農民收益協議
- 人文素養拓展:中華傳統文化知識普及教學計劃
- 2025企業辦公租賃合同標準版樣式
- 健康產業政策法規題庫
- 奇妙的旅行讀后感7篇范文
- 活動策劃與組織流程指南
- 宴席承包協議宴席承包協議
- 2025合作共贏藍圖-中外合作公司合同精粹
- 安徽省合肥八中2025屆高三最后一卷歷史試題及答案
- 2025年四川省成都市初中學業水平考試生物試題(無答案)
- 計算機系統的故障與維護技巧試題及答案
- 領養貓合同協議書范本
- 民航危險品運輸典型案例55課件
- 【9語二模】2025年安徽合肥市第四十五中學中考二模語文試卷
- 倉庫管理制度及流程
- 2025春季學期國開電大本科《現代漢語專題》一平臺在線形考(任務1至5)試題及答案
- 消除“艾梅乙”醫療歧視-從我做起
- 2024年全國統一考試高考新課標Ⅱ卷數學試題(真題+答案)
- (高清版)JTGT 3610-2019 公路路基施工技術規范
評論
0/150
提交評論