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

下載本文檔

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

文檔簡介

1、實 驗 報 告課程名稱: Linux程序設(shè)計 學 院: 信息科學與工程學院 專 業(yè): 13計算機 班 級: 2013-1 姓 名: 學 號: 2016年 6 月 28 日山 東 科 技 大 學 教 務(wù) 處 制實 驗 報 告組別姓名同組實驗者實驗項目名稱實驗一熟悉linux命令實驗日期第12周周四9,10節(jié)教師評語實驗成績指導(dǎo)教師廉文娟1.登錄和退出Linux系統(tǒng) 用戶登錄系統(tǒng)時為了使系統(tǒng)能夠識別自己必須輸入用戶名和密碼經(jīng)系統(tǒng)驗證無后方能進入系統(tǒng)。用戶登錄分兩步進行,第一步輸入用戶的登錄名,系統(tǒng)根據(jù)該登錄名來識別用戶,第二步輸入用戶的口令,該口令是用戶自己選擇的一個字符串對其他用戶是保密的,是在

2、登錄時系統(tǒng)用來辨別真假用戶的關(guān)鍵字。 必須輸入用戶的賬號,分為1)root系統(tǒng)管理員賬號,該賬號可以進行任意操作。2)普通用戶擁有一定的權(quán)限 2其他命令三、實驗內(nèi)容 常用操作命令。1、 在Linux系統(tǒng)中打開終端,利用快捷鍵ctrl+alt+T,打開,結(jié)果如下: 2、 退出:不論是root用戶還是普通用戶,需要退出系統(tǒng),在shell提示符下,鍵入exit命令即可。3、 關(guān)機與重啟: Linux中提供了命令shutdown,可以安全地關(guān)機或重啟系統(tǒng),該命令只能是超級用戶可以使用,命令格式:shutdown 選項時間警告信息其中警告信息是向其他用戶發(fā)布的信息,時間指定關(guān)機或是重啟的時間,選項的意義

3、如下:-h 關(guān)機,關(guān)機前關(guān)閉相關(guān)進程,執(zhí)行fsck命令(文件系統(tǒng)的一致性檢查)-r 系統(tǒng)重新啟動-f 快速關(guān)機,系統(tǒng)關(guān)機前不執(zhí)行fsck命令-n 快速關(guān)機, 系統(tǒng)關(guān)機前不執(zhí)行init命令-k 不關(guān)機,只是將警告信息向其他用戶發(fā)布-c 終止執(zhí)行正在運行的shutdown命令舉例:1.系統(tǒng)立即關(guān)機 shutdown h now2.兩分鐘后重啟系統(tǒng),發(fā)布信息System will be down in 2 minutes!給其他終端用戶。Shutdown r +2 “System will be down in 2 minutes!”除了可以使用shutdown命令來關(guān)機和重啟系統(tǒng)外,Linux還有

4、專門用于關(guān)機和重啟系統(tǒng)的命令poweroff和reboot, reboot用于重啟系統(tǒng)(相當于shutdown r now),命令poweroff則用于關(guān)機(相當于shutdown h now)4、 添加新用戶、修改文件屬性1.添加新用戶(在root下,按默認值回答)adduser 用戶名;如adduser s2001 ; 以新用戶登錄到系統(tǒng)2修改用戶口令 passwd 用戶名3控制文件屬性使用ls l 查看文件屬性改變用戶的所有權(quán):chown 用戶名 文件名改變文件權(quán)限:chmod g+w 文件名;chmod o-r 文件名或使用數(shù)字方式修改:如chmod 644文件名;chmod 755文

5、件名u (user用戶),g ( group組),o (other其他); w 寫訪問權(quán)限,r 讀訪問權(quán)限, x 執(zhí)行權(quán)限4查看相關(guān)命令的幫助:man 命令名5顯示當前系統(tǒng)中已注冊的用戶信息:who6顯示當前注冊的用戶信息:whoami 5、文件顯示命令顯示指定工作目錄中所包含的內(nèi)容的指令是ls,要說明的是ls命令列出文件的名字,而不是文件的內(nèi)容。該命令的使用方式如下: ls 選項 文件目錄列表 ls命令中的常用選項如下: -a:顯示所有文件及目錄 (ls規(guī)定將文件名或目錄名中開頭為 "."的視為隱藏檔,不會列出) -c:按列輸出,縱向排序 -x:按行輸出,橫向排序 -l:

6、除文件名外,也將文件狀態(tài)、權(quán)限、擁有者、文件大小等信息詳細列出 -t:根據(jù)文件建立時間的先后次序列出 -A:同-a,但不列出"." (目前目錄)及"." (父目錄) -X:按擴展名排序顯示 -R:遞歸顯示下層子目錄 -help:顯示幫助信息 -version:顯示版本信息6、查找文件#find 目錄列表 匹配標準1)通過文件名查找# find / -name httpd.conf print2)根據(jù)部分文件名查找#find / name *http* -print7、顯示文本文件內(nèi)容cat 選項文件列表-b 計算所有非空輸出行,開始為1。 -e 在每行末

7、尾顯示$符號。 -n 計算所有輸出行,開始為1。 -s 將相連的多個空行用單一空行代替。 8、查找文件內(nèi)容grep 選項 匹配字符串 文件列表-v 列出不匹配串或正則表達式的行。 -c 對匹配的行計數(shù)。 -l 只顯示包含匹配的文件的文件名。 -h 抑制包含匹配文件的文件名的顯示-n 每個匹配行只按照相對的行號顯示。 -i 產(chǎn)生不區(qū)分大小寫的匹配,缺省狀態(tài)是區(qū)分大小寫。 9、文件復(fù)制命令 Linux下的cp命令用于復(fù)制文件或目錄,該命令是最重要的文件操作命令,其命令格式如下:cp 選項 源文件 目標文件 cp 選項 源文件組 目標目錄-a在備份中保持盡可能多的源文件結(jié)構(gòu)和屬。-b作將要覆蓋或刪除

8、文件的備份。-f刪除已存在的目標文件。-i提示是否覆蓋已存在的目標文件。-p保持原先文件的所有者,組權(quán)限和時間標志-r遞歸拷貝目錄,把所有非目錄文件當普通文件拷貝。-R遞歸拷貝目錄。10、文件的刪除命令rm命令可從文件系統(tǒng)中刪除文件及整個目錄。rm命令所使用的命令格式如下:rm 選項 文件列表-r刪除文件列表中指定的目錄,若不用此標志則不刪除目錄-i指定交互模式。在執(zhí)行刪除前提示確認。任何以Y開始的響應(yīng)都表示肯定;其他則表示否定。-f指定強行刪除模式。通常,在刪除文件權(quán)限可滿足時rm提示。本標志強迫刪除,不用提示。四、實驗步驟1、以root用戶身份登陸,并使用ls,cat,cd等命令來實現(xiàn)基本

9、的文件操作并觀察Linux文件系統(tǒng)的特點,并記錄實驗結(jié)果;2、在/home下新建一個以自己名字命名的子目錄,在這個子目錄中創(chuàng)建一個文件mytest,為這個文件建立一個軟鏈接文件mylink,用ls l查看該子目錄有什么變化,并記錄下來。3、在2的基礎(chǔ)上,為mytest文件更改訪問權(quán)限,分別用字符串方法和數(shù)值方法,將mytest文件的寫訪問權(quán)限都加上,記錄過程和結(jié)果。4、使用重定向。查看/home下的文件及子目錄,并將結(jié)果輸出到mytest文件中,并查看mytest文件的內(nèi)容,記錄下來。5、利用gzip命令為/home下面的mytest文件創(chuàng)建一個壓縮文件,然后查看/home下面的文件,有什么變

10、化,記錄下來。6、利用tar命令將/home下面所有文件打包為一個文件,命名為mytar,并做記錄。 7、利用命令刪除/home下你自己新建的所有的文件或目錄,記錄下來.4、 實驗體會 通過本次實驗,了解了Linux系統(tǒng)的一些操作,熟悉了該系統(tǒng)的命令工作。實 驗 報 告組別姓名同組實驗者實驗項目名稱實驗二shell程序設(shè)計實驗日期第13周周四9,10節(jié)教師評語實驗成績指導(dǎo)教師廉文娟1、 實驗?zāi)康?、 了解和熟悉創(chuàng)建并使用腳本的步驟2、 深入理解shell概念3、 學會簡單的shell編程2、 實驗內(nèi)容1. 編寫一個簡單的回顯用戶名的shell程序2. 使用if-then語句創(chuàng)建簡單的shell

11、程序3. 使用if-then-else語句創(chuàng)建一個根據(jù)輸入的分數(shù)判斷是否及格的shell程序4. 使用for語句創(chuàng)建簡單的shell程序5. 使用while語句創(chuàng)建一個計算1-5的平方的shell程序三、實驗過程1.編寫一個簡單的回顯用戶名的shell程序#vi dat#!/bin/bash#filename:datecho "Mr.$USER,Today is:"echo dateecho Wish you a lucky day!#chmod +x dat#./dat2. 使用if-then語句創(chuàng)建簡單的shell程序#vi bbbb#!/bin/bash#filena

12、me:bbbbecho -n "Do you want to continue: Y or N"read ANSWERif $ANSWER = N -o $ANSWER = n then echo "your answer is quit! "fi#chmod +x bbbb#./bbbb3. 使用if-then-else語句創(chuàng)建一個根據(jù)輸入的分數(shù)判斷是否及格的shell程序#vi ak#!/bin/bash#filename:akecho -n "please input a score:"read SCOREecho "

13、You input Score is $SCORE"if $SCORE -ge 60 ;then echo -n "Congratulation!You Pass the examination."elseecho -n "Sorry!You Fail the examination!"fiecho -n "press any key to continue!"read $GOOUT#chmod +x ak#./ak4. 使用for語句創(chuàng)建簡單的shell程序#vi mm#!/bin/bash#filename:mmfor

14、ab in 1 2 3 4do echo $abdone#chmod +x mm#./mm5. 使用while語句創(chuàng)建一個計算1-5的平方的shell程序#vi zx#!/bin/bash#filename:zxint=1while $int -le 5 do sq=expr $int * $intecho $sqint=expr $int + 1doneecho "Job completed"#chmod +x zx#./zx四、實驗體會通過這次實驗,我懂得了定義SHELL程序設(shè)計中的變量,掌握了SHELL程序中LINUX基本命令的使用,理解了Shell程序的設(shè)計方法,并

15、且熟悉了Shell程序編輯、運行、調(diào)試方法與過程。這為我日后繼續(xù)深入學習Linux課程打下基礎(chǔ)。實 驗 報 告組別姓名同組實驗者實驗項目名稱實驗三文件系統(tǒng)程序設(shè)計實驗日期第14周周四9,10節(jié)教師評語實驗成績指導(dǎo)教師廉文娟1、 實驗?zāi)康模?1.掌握Linux文件系統(tǒng)的基本原理,結(jié)構(gòu)和實現(xiàn)的方法 2.掌握Linux文件系統(tǒng)中文件的建立,打開,讀寫,執(zhí)行,屬性等系統(tǒng)調(diào)用的使用。2、 實驗要求 1掌握Linux文件系統(tǒng)的架構(gòu)及目錄結(jié)構(gòu)。 2掌握有關(guān)Linux文件系統(tǒng)的常用命令。3了解有關(guān)文件安全方面的知識。三、實驗準備知識:文件及其分類 文件是Linux用來存儲信息的基本結(jié)構(gòu)。一個文件就是被命名的一

16、組信息。 Linux文件通常分為普通文件、目錄文件、特別文件(設(shè)備文件)、鏈接文件。 特別文件分為塊特別文件(如磁盤、磁帶、CD-ROM等)和字符特別文件(如終端、打印機等)。塊特別文件與字符特別文件的類型標志分別是“b”和“c”。 例如: 普通文件 -rw-rw-r- 目錄文件 drwxrwx- 塊特別文件 brw-rw-字符特別文件 crw-rw-rw-4、 實驗內(nèi)容 1.瀏覽文件系統(tǒng) (1)運行pwd命令,確定你當前的工作目錄。 (2)利用以下命令顯示當前工作目錄下的所有文件的文件屬性: ls -l對照屏幕上的現(xiàn)實信息,理解各字段的含義。(3)輸入以下命令: ls -ai 觀察顯示的信息

17、。注意列出的前兩項,它們分別表示當前目錄和父目錄??匆幌率欠襁€有其他的隱藏文件? 使用不帶-a選項的ls命令,注意,不再顯示隱藏文件了。使用不帶-i選項的ls命令,注意,文件的I節(jié)點號(inode)不再出現(xiàn)。(4) 用mkdir命令建立一個子目錄subdir。(5) 使用cd命令,將當前目錄改到根目錄()上。利用絕對路徑和相對路徑兩種方式。利用pwd命令確認你的工作目錄。6) 使用ls命令列出根目錄的內(nèi)容,再分別列出各子目錄的內(nèi)容。體會各子目錄的作用以及訪問權(quán)限。(7) 使用ls -l命令列出/dev的內(nèi)容,注意各行第一個字符b和c的含義以及規(guī)定的訪問權(quán)限。 (8) 使用不帶參數(shù)的命令cd,然

18、后用pwd命令確認你當前的工作目錄。 2查看你的文件 (1)利用cd命令,將工作目錄改到你自己的用戶目錄(你的主目錄)上。(2)將工作目錄改到你新建的子目錄subdir,然后運行命令: date>file1 將當前日期和時間存放到新建文件file1中。(3)使用cat命令查看file1文件的內(nèi)容。 (4)利用man命令顯示date命令的用法: man date (5)將date命令的用法附加到文件file1的后邊: man date>>file1 此時,你在屏幕上看不到有關(guān)date命令用法的信息。 (6)利用cat或more命令顯示文件file1的內(nèi)容。你會看到,前面date

19、命令的輸出和有關(guān)date命令用法的信息都在這個文件中。 (7)利用ls -l file1命令列出文件file1的較詳細的信息,注意其中第二字段(鏈接計數(shù))的值。 (8)利用ln file1 ./fa命令進行文件連接。然后運行l(wèi)s -l file1,查看顯示的第二個字段的值發(fā)生了什么變化。 (9)現(xiàn)在想利用cat fa命令顯示文件fa的內(nèi)容,應(yīng)該如何改動工作目錄? (10)設(shè)你的主目錄是/home/helen,利用ln s /home/helen/subdir/filel slink進行符號鏈接。然后,利用ls -l file1 slink顯示有關(guān)file1和slink的信息。注意各自鏈接計數(shù)值

20、的差別。 (11)將工作目錄移到你的主目錄下的subdir。利用head命令顯示file1前10行(這是默認值)的內(nèi)容: head filel (12)利用tail file1命令顯示file1后10行(這是默認值的內(nèi)容)的內(nèi)容。 (13)運行l(wèi)s l /bin命令顯示/bin目錄的內(nèi)容。你在屏幕上看到什么?能夠看到/bin下命令的所有信息嗎? (14)利用ls l /bin|more命令行分屏顯示/bin目錄的內(nèi)容。一次顯示一頁。首先顯示第一頁。按回車鍵,只顯示該文件的下一行;按Space鍵,顯示該文件的下一屏。 連續(xù)按幾次Space鍵,到達該文件的末尾?;氐絪hell環(huán)境下。 (15)利用

21、cp file1 file2命令生成文件file1的副本。然后再利用cp file1 file1bak命令生成文件file1的另一個副本。利用ls -1命令查看當前工作目錄的內(nèi)容有什么變化。 (16)利用cat file*命令列出當前工作目錄中以file開頭的所有文件。(17)運行cat file?命令,與上面結(jié)果相比有何差別? (18) 利用刪除命令rm file1bak命令將文件file1bak刪除,再利用ls -l命令查看工作目錄的內(nèi)容。 (19) 運行mv file2 fa 命令,然后利用ls命令查看兩個文件是否還在工作目錄中。 3文件操作 (1)查找文件和目錄。 利用find命令可以

22、查找文件和目錄的位置。你要告訴系統(tǒng)所要查找的文件名和從哪個目錄開始查找。其常用使用格式是: find pathname-name filename -print 其中,pathname是指定開始查找的目錄,filename是所要查找的文件或目錄。-name和-print是find命令的選項。 例如:find . -name file1 print (請看清楚中間那個小點“.”代表當前目錄) 在當前目錄和所有下面的子目錄中查找名為filel的文件,并且把找到的文件的路徑名顯示在屏幕上。 find . -name 'f*' print(“.”代表當前目錄的父目錄) 在當前目錄的父目

23、錄的所有子目錄中查找名字以f開頭的文件名。要查找的文件名模式f*必須用引號括起來,因為其中用到shell的通配字符(*)。 (2)查找文件中指定的模式。grep命令常用于在文本文件中查找給定的詞或短語,包含給定模式字符串的行在標準輸出(即顯示器)上顯示出來。 例如:$grep user3etcpasswd 在口令文件etcpasswd中查找字符串“user3”。 4文件存取權(quán)限 (1)存取權(quán)限。Linux系統(tǒng)對所有文件設(shè)置了存取權(quán)限。存取權(quán)限讓你確定誰可以對你的個人文件和目錄進行訪問以及可以進行什么操作。§ 把所有用戶分為三類: -文件主(user),即文件的所有者。 -組用戶(gr

24、oup),即文件組的成員。 -其他用戶(other),即能對系統(tǒng)進行訪問的所有其他用戶。§ 對一個文件的存取權(quán)限分為3種: -讀(r) -寫(w) -執(zhí)行(x)§ 一組存取權(quán)限以及相應(yīng)的文件類型統(tǒng)稱為文件模式。 如:rw- r- r-:表示文件主有讀和寫的權(quán)限,同組用戶和其他用戶只有讀權(quán)限。 (2)文件存取權(quán)限。 1)讀權(quán)限(r):允許指定的用戶可以打開文件并閱讀其內(nèi)容。存取文件的內(nèi)容作為輸入的命令都需要有讀權(quán)限。例如:cat,more,file和cp命令等。 2)寫權(quán)限(w):允許指定的用戶可以打開文件并修改其內(nèi)容。用于打開文件、寫文件或修改其內(nèi)容的命令有vi,mail,

25、cp等。3)執(zhí)行權(quán)限(x):允許指定的用戶運行(即執(zhí)行)一個二進制文件或者把一個shell腳本文件當作命令來運行。當通過輸入命令名來調(diào)用命令時,必須具有該命令文件的執(zhí)行權(quán)限。例如,ls命令是/bin/ls可執(zhí)行文件的名字。當在命令行方式下輸入ls時,就是在執(zhí)行這個文件。 (3)目錄存取權(quán)限。 1)讀權(quán)限(r):允許列出相應(yīng)目錄中所存放的文件的名字(即目錄的內(nèi)容表)。該權(quán)限也允許shell使用文件名擴展字符(通配符)來匹配文件名。 2)寫權(quán)限(w):允許從目錄中刪除已有文件或者把新文件添加到目錄中。由于寫權(quán)限允許刪除數(shù)據(jù),所以,通常只有目錄所有者才有寫權(quán)限。 3)查詢權(quán)限(x):允許在目錄中進行

26、查找和使用cd命令把工作目錄改到它這里。如果沒有這一權(quán)限,就不能將此目錄作為路徑名的一部分。這一方式可以有效地阻止對層次文件系統(tǒng)的子分支的訪問。 一般說來,為了在實際中使用目錄,你需要有讀和查詢的權(quán)限。如果沒有查詢權(quán)限,那么,通常也不會具有對目錄的其他權(quán)限。 使用ls -l命令,列出當前工作目錄中各文件的類型和權(quán)限。 (4)修改文件權(quán)限。 文件主或root用戶可以使用chmod命令來修改文件或目錄的權(quán)限。 修改文件權(quán)限的方式有兩種:符號模式和絕對模式。 1)符號模式。使用chmod命令修改當前權(quán)限設(shè)置的一般形式是: chmod key file file 其中,key由以下成分組成:who+|

27、+mode】 · who這一部分可以由下面的一個和多個字符組成:u,g,o或a,它們分別表示文件主、組用戶、其他用戶或所有3種用戶。默認值是a(all)。 · 第二部分必須是以下3個字符中的一個:+,或者=,分別表示增加、刪除或者設(shè)定。 · mode成份可以由以下字符任意組合:r,w,或x,分別表示讀、寫或者執(zhí)行查詢的權(quán)限。 以上3個部分必須依次輸入,而且它們之間沒有空格。在一個命令行中可以指定多個key,彼此之間用逗號隔開,中間沒有空格。 例如:設(shè)文件file1原來的權(quán)限是rw-rw-r-,現(xiàn)在想讓所有用戶都具有執(zhí)行權(quán)限,則可使用以下命令: chmod a+x

28、file1 該命令執(zhí)行后,文件file1的權(quán)限將變成rwxrwxr-x。 練習: · 首先使用ls -1命令查看文件file1的存取權(quán)限。 · 然后是用以下命令: chmod g-r,o-r file1 修改file1的權(quán)限組用戶和其他用戶都被取消對該文件的讀權(quán)限。 · 最后,使用命令: ls -1 file1核查文件filel存取權(quán)限的變化情況。 2)絕對模式。在chmod命令中可以使用數(shù)字表示不同的權(quán)限。 · key這一部分可由3個或多個數(shù)字組成,其中每一個數(shù)字表示一類用戶(文件主、組用戶、其他用戶)的權(quán)限。 · 每個數(shù)字都表示不同的權(quán)限,

29、如:r=4(100),w=2(010),x=(001)l。 如果某種權(quán)限被禁用,則對應(yīng)的值為0。 表示權(quán)限值的數(shù)字范圍從0到7。 key部分可以形成一個3位數(shù)字,其中第一位表示文件主權(quán)限,第二位表示組用戶權(quán)限,第三位表示其他用戶權(quán)限。 例如:符號模式 rw- rw- r- 絕對模式 6(110) 6(110) 4(100) 例如: 運行一下命令,把文件filel的權(quán)限改為對所有用戶都有讀和寫的權(quán)限: chmod 666 file1 用ls -1命令和查文件file1的權(quán)限。 (9) 使用命令cd ./.,你將工作目錄移到了什么地方?5、 實驗體會通過本次實驗,了解了文件的一些相關(guān)操作,收獲頗豐

30、。實 驗 報 告組別姓名同組實驗者實驗項目名稱實驗四進程編程實驗日期第15周周四9,10節(jié)教師評語實驗成績指導(dǎo)教師廉文娟1、 實驗?zāi)康募耙?掌握Linux進程編程的基本方法。2、 實驗內(nèi)容步驟:1、 啟動一個新進程#include<stdlib.h> #include<stdio.h> void main() intresult_code; printf("Running ps with systemn"); result_code=system("psax&"); if(resu

31、lt_code=127)printf("can'tstartashell"); if(result_code=-1)printf("start error"); elseprintf("running success"); 運行結(jié)果如圖:2、 exec系列函數(shù)#include<unistd.h> #include<stdlib.h> #include<stdio.h> void main() printf("execseriesfunctionstes

32、tn"); printf("execven"); char*constps_argv="ps","ax",0; char*constps_envp="PATH=/bin:/usr/bin","TERM=console",0; execv("/bin/ps",ps_argv); printf("Done.n"); 運行結(jié)果如下:3、 復(fù)制進程映像,folk()#include<stdio.h> #include<stdlib.h&

33、gt; #include<unistd.h> #include<sys/types.h> int main() pid_t pid; char *message; int n; printf("fork n"); pid = fork(); switch(pid) Case -1:perror("fork error"); break; case  0:message="this is child&qu

34、ot; n=8; break; default:message="this is parent" n=3; break; for(;n>0;n-) puts(message); sleep(1); exit(0); 運行結(jié)果如圖:分裂后父子進程是彼此相互獨立運行的,所以要想讓父進程等待子進程,只需使用wait()系統(tǒng)調(diào)用:#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<sys/w

35、ait.h>int main()Pid-t pid;char *message; int n; int exit_code; printf("wait testn"); pid = fork(); switch(pid) case -1:perror("fork failed"); exit(1); case  0:message = "this is child" n 

36、= 8; exit_code = 37; break; default:message = "this is parent" n= 5; exit_code = 0; break; for(;n>0;n-) puts(message); sleep(1); if(pid != 0) int stat_val; pid_t child_pid; child_pid = wait(&stat_val); p

37、rintf("waiting for child to finishn"); if(WIFEXITED(stat_val) printf("child exit code is %dn",WEXITSTATUS(stat_val); Else printf("child exit failedn"); exit(exit_code); 運行結(jié)果如下:4、 僵尸進程所謂僵尸進程,子進程先于父進程結(jié)束,但是因為父子進程間依然有關(guān)系,那么子進

38、程實際上不會真正意義上終結(jié),如果查看當前進程表,會發(fā)現(xiàn)該進程依然存在,且會被標記為<defunct>/<zombies>。人為產(chǎn)生僵尸進程也并不那么輕松,但是在上面那個等待例子中,如果讓子進程先于父進程退出,在父進程結(jié)束前調(diào)用ps -al命令后就會發(fā)現(xiàn)有這么一個僵尸進程,實現(xiàn)方法如下:#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<sys/types.h> #include<sys/wait.h> int main()

39、pid_t pid; char *message; int n; int exit_code; printf("wait testn"); pid = fork(); switch(pid) case -1:perror("fork failed"); exit(1); Case 0:message = "this is child" n = 3; exit_code =

40、60;37; break; default:message = "this is parent" n= 12; exit_code = 0; break; for(;n>0;n-) puts(message); if(n = 1 )printf("child finishedn");system("ps -al"); sleep(1); if(pid != 0) int stat_

41、val; pid_t child_pid; child_pid = wait(&stat_val); printf("waiting for child to finishn"); if(WIFEXITED(stat_val) printf("child exit code is %dn",WEXITSTATUS(stat_val); Else printf("child exit failedn"

42、); exit(exit_code); 運行結(jié)果如圖:實 驗 報 告組別姓名同組實驗者實驗項目名稱實驗五套接字編程實驗日期第16周周四9,10節(jié)教師評語實驗成績指導(dǎo)教師廉文娟1、 實驗?zāi)康?掌握Socket編程方法,學會UDP Socket和TCP Socket編程。二、實驗內(nèi)容及其結(jié)果 1、Linux上兩個進程間的通信 Server端:調(diào)用socket函數(shù)創(chuàng)建一個socket,然后用bind函數(shù)語氣本機地址及口號綁定,收到client端消息后,打印出來。 Client端:接收server端發(fā)來的字符串,打印出來Server和client通信截圖:UDPSever:#include 

43、<sys/types.h> #include <sys/socket.h>  #include <netinet/in.h>  #include <stdio.h>  #include <errno.h>  #include <stdlib.h>  #include <strings.h>  #include &l

44、t;unistd.h>  #include <string.h>  #include <ctype.h>   #define PORT 7000    int main(void)    int sockfd,pktlen;  char buf300,buf1300;  struct sockadd

45、r_in server,client;  sockfd=socket(AF_INET,SOCK_DGRAM,0);  memset (char *)&server, sizeof(server), 0); /將已開辟內(nèi)存空間 server 的全部字節(jié)的值設(shè)為值0.server.sin_port = htons(PORT);/端口號  server.sin_addr.s_addr = INADDR_ANY;/設(shè)

46、置網(wǎng)絡(luò)地址,INADDR_ANY表示機器的IP地址   bind(sockfd,(struct sockaddr *)&server,sizeof(struct sockaddr_in);   for (;)  /*recv接受client發(fā)送的數(shù)據(jù),recv函數(shù)僅僅是copy數(shù)據(jù),真正的接收數(shù)據(jù)是協(xié)議來完成的), 第一個參數(shù)指定接收端套接字描述符;第二個參數(shù)指明一個緩沖區(qū),該緩沖區(qū)用來存放recv函數(shù)接收到的數(shù)據(jù);第三個參數(shù)指明buf的長度 re

47、cv函數(shù)返回際cop*/  int l=sizeof(struct sockaddr_in);  pktlen = recvfrom (sockfd, buf, sizeof (buf), 0,(struct sockaddr_in *)&client,&l);     if (pktlen = 0)   break;&#

48、160; printf ("Received line: %sn", buf);  printf ("Enter a line: ");  fgets(buf1,300,stdin); /*并不是send把ns的發(fā)送緩沖中的數(shù)據(jù)傳到連接的另一端的,而是協(xié)議傳的,send僅僅是把buf中的數(shù)據(jù)copy到ns的發(fā)送緩沖區(qū)的剩余空間里 返回實際copy的字節(jié)數(shù)*/ sendto (sockfd

49、, buf1,sizeof(buf1), 0,(struct sockaddr_in*)&client,l);   close(sockfd);    UDPClient:#include <sys/types.h>  #include <sys/socket.h>  #include <netinet/in.h>  #include <errno

50、.h>  #include <stdio.h>  #include <unistd.h>  #include <string.h>  #include <stdlib.h>  #include <arpa/inet.h>   #define MAX_SIZE 1024  #define PORT

51、0;7000  #define HOST_ADDR "37"    int main(int argc,char *argv)    int sockfd,buflen;  char buf1300,buf2300;  struct sockaddr_in server;  sockfd=socket(

52、AF_INET,SOCK_DGRAM,0);   server.sin_family=AF_INET;  server.sin_port = htons(PORT);  server.sin_addr.s_addr = inet_addr (HOST_ADDR);  for(;)   printf ("Enter a line: ");  gets

53、 (buf1);/從stdin流中讀取字符串,直至接受到換行符  buflen = strlen (buf1);  if (buflen = 0)   break; sendto(sockfd, buf1, buflen + 1, 0,(struct sockaddr *)&server,sizeof(server);  recv(sockfd,&#

54、160;buf2, sizeof (buf2), 0);  printf("Received line: %sn", buf2);    close(sockfd);  return 0;  TCPServer:#include <stdio.h> #include <stdlib.h> #include <string.h&g

55、t; #include <netinet/in.h> #include <errno.h>  #define PORT 7000  main ()  struct sockaddr_in client, server;/ 客戶端地址信息  本機地址信息 int s, ns, namelen, pktlen;/s:監(jiān)聽socket

56、60; ns:數(shù)據(jù)傳輸socket namelen:client的地址長度 pktlen:傳送數(shù)據(jù)的字節(jié)數(shù) char buf400; char buf3200; s=socket(AF_INET, SOCK_STREAM, 0); /創(chuàng)建連接的SOCKET,s為socket描述符  / 初始化服務(wù)器地址 memset (char *)&server, sizeof(server), 0); 

57、;/將已開辟內(nèi)存空間 server 的全部字節(jié)的值設(shè)為值0.類似于bzero server.sin_family = AF_INET; server.sin_port = htons(PORT);/端口號 server.sin_addr.s_addr = INADDR_ANY;/設(shè)置網(wǎng)絡(luò)地址,INADDR_ANY表示機器的IP地址  /server需要在listen之前綁定一個大家都知道的地址,就是剛剛初始化好的ip+端口號 bind(s, (s

58、truct sockaddr *)&server, sizeof(server);  listen(s,1);/偵聽客戶端請求,i為socket可以排隊鏈接的最大個數(shù) /*接受client請求,s為server的描述符(即監(jiān)聽socket描述符),第二個參數(shù)即指針client的協(xié)議地址,第三個參數(shù)代表地址長度 返回值ns是一個全新的描述符,是數(shù)據(jù)傳輸socket,代表與返回客戶的tcp連接*/ namelen = sizeof (client); ns = accept (s, (struct sockaddr *)&client

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論