浙江大學(xué)Linux程序設(shè)計實驗報告_第1頁
浙江大學(xué)Linux程序設(shè)計實驗報告_第2頁
浙江大學(xué)Linux程序設(shè)計實驗報告_第3頁
浙江大學(xué)Linux程序設(shè)計實驗報告_第4頁
浙江大學(xué)Linux程序設(shè)計實驗報告_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、-. z.Linu*程序設(shè)計實驗報告1操作系統(tǒng)根本命令使用一、實驗?zāi)康?通過對Emacs、vi、vim、gedit文本編輯器的使用,掌握在Linu*環(huán)境下文本文件的編輯方法;2通過對常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linu*操作系統(tǒng)中文件命令的用法。二、實驗任務(wù)與要求1emacs的使用,要求能新建、編輯、保存一個文本文件2vi或vim的使用,要求能新建、編輯、保存一個文本文件3gedit的使用,要求能新建、編輯、保存一個文本文件4掌握mkdir、cd命令的操作,要求能建立目錄、進入與退出目錄5掌握cp、ls、mv、chmod、rm命令的操作,要

2、求能拷貝文件、新建文件、查看文件、文件重命名、刪除文件等操作。三、實驗工具與準(zhǔn)備計算機PC機,Linu* Redhat Fedora Core6操作系統(tǒng)四、實驗步驟與操作指導(dǎo)任務(wù)1學(xué)習(xí)emacs的使用,要求能新建、編輯、保存一個文本文件1啟動emacs2輸入以下C程序3保存文件為kk.c4用emacs翻開文件kk.c5修改程序6另存為文件aa.t*t并退出。任務(wù)2vi或vim的使用,要求能新建、編輯、保存一個文本文件1點擊應(yīng)用程序 附件終端,翻開終端,在終端輸入命令:rootlocalhost root#vi kk.c按i鍵,進入插入狀態(tài)。2輸入以下C程序 #include int main(

3、 ) printf(Hello world!n); return 0;此時可以用Backspace、鍵編輯文本。3保存文件為kk.c 按Esc鍵,進入最后行狀態(tài),在最后行狀態(tài)輸入:wq保存文件,退出vi。4用vi翻開文件kk.c,輸入命令:rootlocalhost root#vi kk.c5修改程序為:#includeint main( ) printf( Hello world!n); printf(*n); return 0;6 按Esc鍵,進入最后行狀態(tài),在最后行狀態(tài)輸入:wq aa.t*t保存文件,如圖1所示,另存為文件aa.t*t并退出vi。圖1 程序編輯環(huán)境任務(wù)3gedit的使用

4、,要求能新建、編輯、保存一個文本文件1啟動gedit,點擊應(yīng)用程序 附件文本編輯器,翻開文本編輯器,如下圖。2輸入以下C程序3保存文件為kk.c4用gedit翻開文件kk.c5修改程序6另存為文件aa.t*t并退出。任務(wù)4掌握mkdir、cd命令的操作,要求能建立目錄、進入與退出目錄1翻開終端應(yīng)用程序 附件終端,在終端用命令新建目錄kkk rootlocalhost root#mkdir kkk2進入目錄kkk,并在kkk目錄下新建目錄kkka,進入kkka目錄 rootlocalhost root#cd kkkrootlocalhost kkk#mkdir kkkarootlocalhost

5、 kkk#cd kkkarootlocalhost kkka#3執(zhí)行命令cd . 命令,然后再進入kkka目錄,輸入命令cd 、cd /etc,觀察其結(jié)果。rootlocalhost kkka#cd .rootlocalhost kkk#cd kkkarootlocalhost kkka#cdrootlocalhost root#cd /etcrootlocalhost etc#任務(wù)5掌握cp、ls、mv、chmod、rm命令的根本操作,要求能拷貝文件、新建文件、查看文件的權(quán)限、修改文件以及刪除文件。1在kkka目錄下建立文件kk.crootlocalhost root#cd /root/kk

6、k/kkkarootlocalhost kkka#vi kk.c2查看文件kk.c的屬性rootlocalhost kkka#ls kk.c -l編輯kk.c文本,并用:wq存盤。3把kk.c更名為aa.c rootlocalhost kkka#mv kk.c aa.c4把文件夾/root/kkk/kkka下的文件aa.c拷貝到/root/kkk目錄下,文件取名為kk.crootlocalhost kkka#cp aa.c /root/kkk/kk.c5修改文件kk.c的權(quán)限,使得文件所有者為可讀、可寫、可執(zhí)行,對組內(nèi)人及其他人可讀、不可寫、不可執(zhí)行。rootlocalhost kkka#cd

7、 .rootlocalhost kkk#chmod u=rw*,go=r kk.c此時可用命令ls查看rootlocalhost kkk#ls -l6刪除文件與文件夾刪除kkka文件夾下的文件aa.crootlocalhost kkk#rm kkka/aa.c查看文件夾kkka下否刪除了文件aa.crootlocalhost kkkls kkka/aa.c -l刪除kkka文件夾下rootlocalhost kkk#rmdir kkka查看是否刪除了文件夾rootlocalhost kkkls kkka -l7 新建一個linu*_d目錄,并設(shè)置它的權(quán)限為666。8在指定的目錄中搜索文件,利用

8、find命令搜索含有通配符的文件*.c。9練習(xí)命令:pingnetstatmountifconfig 10在根目錄下用find查找.c文件。11練習(xí)檢查磁盤命令fdisk的使用。列出結(jié)果中有關(guān)/dev/sd的磁盤信息。/sbin/fdisk -l |grep /dev/sd 12設(shè)置當(dāng)前的時間為2013年10月01日10點23分。13在后臺運行命令gedit,并用命令kill殺死gedit的進程。14檢查磁盤,列出目錄/dev/sd的磁盤信息。15查找/usr/sbin及/usr/bin/兩個目錄中所有的C語言程序。16統(tǒng)計當(dāng)前目錄下t*t文件的總字節(jié)數(shù)。17把ps命令的標(biāo)準(zhǔn)輸出結(jié)果輸入給so

9、rt,經(jīng)過排序后結(jié)果被保存到pssort.out中。五、實驗結(jié)果記錄任務(wù)2vi或vim的使用1、輸入vi kk.c創(chuàng)立kk.c文件并用vi編輯,在最后行輸入wq保存退出2、輸入vi kk.c翻開該文件,修改文件,在最后行輸入wq! aa.t*t另存為aa.t*t文件并退出任務(wù)3gedit的使用輸入gedit命令翻開gedit編輯器,輸入以下文字,保存為kk.c在保存目錄下輸入gedit kk.c翻開,使用ctrl+h替換,另存為aa.t*t任務(wù)4掌握mkdir、cd命令的操作輸入mkdir kkk新建目錄kkkcd kkk進入kkk文件夾mkdir kkka新建目錄kkkacd kkka進入k

10、kka文件夾,結(jié)果如圖輸入cd .返回上級目錄,cd kkka再進入kkka文件夾輸入cd進入用戶主目錄,即root文件夾,可使用pwd命令查看當(dāng)前路徑輸入cd/etc進入etc文件夾任務(wù)5掌握cp、ls、mv、chmod、rm命令的根本操作輸入cd/home/brs/work/kkk/kkka 即絕對路徑,可直接進入指定文件夾,vi kk.c建立文件編輯保存后,輸入ls kk.c l查看指定文件詳細屬性輸入mv kk.c aa.c將文件kk.c重命名為aa.c此時mv命令源文件和目標(biāo)文件在同一文件夾下,故起到重命名作用輸入cp aa.c /home/brs/work/kkk/kk.c將aa.

11、c文件拷貝到kkk下并命名為aa.c輸入chmod u=rw*,go=r kk.c修改文件權(quán)限,所有者讀寫運行,組內(nèi)可讀,查看輸入rm kkka/aa.c刪除kkka文件夾下aa.c文件,使用ls命令查看是否刪除輸入rmdir kkka刪除kkka文件夾,再次查看是否刪除新建一個linu*_d目錄,設(shè)置權(quán)限為使用chmod 666 linu*_d設(shè)置其權(quán)限為可讀可寫可執(zhí)行輸入find /home/brs/work/kkk -name *.c 在指定目錄搜索.c文件輸入find -name *.c 在根目錄下搜索.c文件輸入ping .baidu.查看與百度連接情況,使用ctrl+c中斷輸入ne

12、tstat顯示各種網(wǎng)絡(luò)相關(guān)信息,如網(wǎng)絡(luò)連接,路由表,接口狀態(tài)輸入ifconfig查看網(wǎng)絡(luò)配置信息,如IP地址mount /dev/sda1 /mnt/usb將設(shè)備名為sda1的U盤掛載至/mnt/usb使用umount /mnt/usb卸載U盤輸入/sbin/fdisk l|grep /dev/sd列出有關(guān)/dev/sd的磁盤信息,此處使用管道命令|將fdisk的輸出作為grep的參數(shù)輸入輸入date -s 20131001 10:23:00 設(shè)置系統(tǒng)時間輸入gedit& 在后臺運行g(shù)edit,此時輸入ps查看gedit進程PID號為100963,再輸入kill -9 100963完畢進程。輸

13、入find /usr -name *.c 查找usr目錄下所有.c文件10、輸入wc c *.t*t統(tǒng)計當(dāng)前目錄下t*t文件的總字節(jié)數(shù)輸入ps sort result 把ps命令的標(biāo)準(zhǔn)輸出結(jié)果輸入給sort,經(jīng)過排序后結(jié)果被保存到result中六、實驗結(jié)果分析通過使用shell命令可直接完成文件命令操作,文本文件的編輯,并更改簡單的系統(tǒng)設(shè)置七、實驗心得(思考和意見)Linu*的shell命令讓用戶可以使用功能強大的命令,完成一些windows上無法完成或繁瑣的操作,為以后程序的編寫,系統(tǒng)管理提供了便利,我們應(yīng)熟練掌握這些根底知識。 在學(xué)習(xí)過程中遇到了不少問題,通過網(wǎng)絡(luò)得到了解決。sodu ap

14、t-get命令在使用vi編輯器時,上下左右按鍵變成了ABCD,這是由于vi版本號不同所造成的,此時需要使用sudo apt-get remove vim卸載原版vim,再輸入sodu apt-get install vim安裝最新版本,便可解決問題。此外sudo apt-get upgrade 用于更新已安裝的軟件。su命令以常規(guī)用戶登錄時權(quán)限缺乏,在修改系統(tǒng)文件時會遭到拒絕,此時輸入su及root密碼可臨時切換至root用戶,獲取最高命令。rmdir命令只能刪除空文件夾,假設(shè)要刪除非空文件夾,應(yīng)使用rmr開機登陸界面輸入密碼后無法進入桌面,此時按下ctrl+alt+F1可進入tty命令行,實

15、際上F1-F6對應(yīng)6個本地命令臺,而F7對應(yīng)圖形界面,修改完成后按下ctrl+alt+F7即可返回圖形界面。Linu*程序設(shè)計實驗報告2SHELL程序設(shè)計1一、實驗?zāi)康?Shell程序設(shè)計中變量的使用;2理解通道的概念并初步掌握它的使用方法;3掌握算術(shù)操作、字符串操作、邏輯操作、文件操作;4掌握if then fi、if then elif fi、case、while、for等控制語句;5在shell腳本中使用函數(shù); 二、實驗任務(wù)與要求1.觀察變量$#,$0,$1,$2,$3,$的含義2.SHELL程序設(shè)計中文件與文件夾的判斷3.順序、分支、循環(huán)程序的設(shè)計4.菜單程序的編寫三、實驗工具與準(zhǔn)備計

16、算機PC機,Linu* Redhat Fedora Core6操作系統(tǒng)四、實驗步驟與操作指導(dǎo)任務(wù)1調(diào)試以下shell程序,寫出變量$#,$0,$1,$2,$3,$的含義。#! /bin/bashecho 程序名:$0echo 所有參數(shù): $echo 前三個參數(shù):$1 $2 $3shiftecho 程序名:$0echo 所有參數(shù): $echo 前三個參數(shù):$1 $2 $3shift 3echo 程序名:$0echo 所有參數(shù): $echo 前三個參數(shù):$1 $2 $3e*it 0修改程序,使用變量$#,程序運行時從鍵盤輸入文件名,判斷文件是否存在,如果存在,顯示文件內(nèi)容。提示:read DORF

17、if -d $DORF then ls $DORF elif -f $DORF任務(wù)2編寫一個shell程序,此程序的功能是:顯示root下的文件信息,然后建立一個kk的文件夾,在此文件夾下新建一個文件aa,修改此文件的權(quán)限為可執(zhí)行。提示:進入root目錄:cd /root顯示root目錄下的文件信息:ls l新建文件夾kk:mkdir kk進入root/kk目錄:cd kk新建一個文件aa:vi aa #編輯完成后需手工保存修改aa文件的權(quán)限為可執(zhí)行:chmod +* aa回到root目錄:cd /root請修改程序,所建立的目錄名從鍵盤輸入,把/root下的所有文件信息保存在aa文件中。任務(wù)

18、3調(diào)試以下shell程序,此程序的功能是:利用內(nèi)部變量和位置參數(shù)編寫一個名為test2的簡單刪除程序,如刪除的文件名為a,則在終端輸入的命令為 test a。提示:除命令外至少還有一個位置參數(shù),即$#不能為0,刪除的文件為$1。(1)用vi編輯程序rootlocalhost bin#vi test2#!/bin/sh if test $# -eq 0 then echo Please specify a file! else gzip $1 /先對文件進展壓縮 mv $1.gz $HOME/dustbin /移動到回收站 echo File $1 is deleted !fi(2)請修改程序,

19、查看回收站中的文件,從鍵盤輸入回收站中的*一文件,把此文件恢復(fù)到/home目錄下。3刪除垃圾箱中的所有文件。任務(wù)4調(diào)試以下程序,程序的主要思想是用while循環(huán)求1到100的和。 (1)用gedit編輯腳本程序test12rootlocalhost bin#gedit test12 total=0num=0 while(num替換-復(fù)原IFSBAK=$IFS (備份原來的值)- IFS=,(替換) - IFS=$IFSBAK 復(fù)原7、使用bc計算器時,用scale=n來準(zhǔn)確到n位小數(shù) 在shell程序中使用a=echoscale=n;*+y|bc來進展運算七、實驗心得(思考和意見)1、內(nèi)部參數(shù)

20、在shell編程中十分有用,應(yīng)熟練掌握$0 :程序所在的路徑$# :傳遞給程序的總的參數(shù)數(shù)目$ :shell程序在shell中退出的情況,正常退出返回0,反之為非0值$* :傳遞給程序的所有參數(shù)組成的字符串賦值時等號左右無空格使用$(mand)格式進展命令替換,如echo $(date)將輸出Thu Jul 23 17:10:38 CST 2015Linu*程序設(shè)計實驗報告3SHELL程序設(shè)計2一、實驗?zāi)康?提高Shell程序編程的技巧;2提升綜合shell編程能力。二、實驗任務(wù)與要求1.菜單的實現(xiàn)2.遍歷所有以該目錄為祖先的文件3.分支與循環(huán)、隨機數(shù)在游戲程序中的應(yīng)用4.定時檢查存儲空間文件

21、的變化5.消息框程序設(shè)計6.菜單界面程序設(shè)計三、實驗工具與準(zhǔn)備計算機PC機,Linu* Redhat Fedora Core6操作系統(tǒng)實驗步驟與操作指導(dǎo)任務(wù)1.編寫以下程序。程序的功能是要實現(xiàn)如下菜單所表示的功能。 請輸入您要清空的文件類型 1文件夾 2其他文件 3所有文件 0沒想好,先退出任務(wù)2.調(diào)試以下shell程序。補充完整以下Shell程序,要求輸入一個目錄名,函數(shù)list的功能是遍歷所有以該目錄為祖先的文件,大致實現(xiàn)命令ls -R的功能。#!/bin/shlist()cd $1ls -lfor i in $(ls $1)do if -d $i then directory=$1/$i

22、 echo The directory $directory is a subdirectory of $1, which includes: list $directory cd $1 fi done 任務(wù)3.調(diào)試以下shell程序,這是一個小游戲,閱讀程序,寫出這個游戲的玩法。#!/bin/bashfor i in $( seq 1 54 ) #初始化牌do ok$i=1donema*=0 #初始化贏家for i in $(seq 1 4 ) #游戲開場do echo Player $i #玩家i 的回合 a=$(RANDOM%53+1) #抽牌 while $ok$a -eq 0 ; d

23、o a=$(RANDOM%53+1) done ok$a=0 if $a -gt $ma* ; thenma*=$a num=$i fi HuaSe=$(a%4) #生成花色case $HuaSe in 0)HS=C; #草花 1)HS=D; #方塊 2)HS=H; #紅心 3)HS=S; #黑心 esac Da*iao=$(a/4+1) #生成牌值case $Da*iao in 2|3|4|5|6|7|8|9|10) echo $HS $Da*iao;11)echo $HS J; 12)echo $HS Q; 13)echo $HS K; 1 )echo $HS A; 14)echo sma

24、ll JOKE ; #小王 15)echo big JOKE ; #大王esac read lldoneecho Player $num win ! #游戲結(jié)果任務(wù)4.編寫以下shell程序。編寫一個程序,每隔5分鐘檢查一下當(dāng)前用戶假設(shè)用戶名為liujh是否有新的,假設(shè)有則提示用戶。提示題目的關(guān)鍵問題是獲取5分鐘前后此文件夾的存儲容量,如果箱中存儲容量發(fā)生變化,則可判斷有新到達。提示關(guān)鍵語句: count1=ls -l /var/mail/liujh|awk print $5 echo $count1 sleep 300 #隔5分鐘檢測一次 count2=ls -l /var/mail/liu

25、jh|awk print $5 echo $count2 if $count1 -eq $count2 任務(wù)5.調(diào)試以下程序,程序調(diào)試后把此程序改寫為游戲菜單控制程序。#! /bin/shdialog -title Start -msgbo*dialog -title Wele to the Start Menu.dialog -title Confirm -yesno Do you want to enter the Menu 9 18if $ != 0; then dialog -infobo* Wele! sleep 2 dialog -clear e*it 0fidialog -men

26、u MENU 12 24 3 1 CO Player 2 Radio 3 Sound Control 2_1.t*tM_O = $(cat _1.t*t)if $M_O = 1 ; then !gnome-cdelif $M_O = 2 ; then !gnome-sound-recorderelse !gnome-volume-controlfie*it 0任務(wù)6.調(diào)試以下程序。程序功能是設(shè)計了一個簡單的調(diào)查問卷菜單界面,調(diào)查學(xué)生一些個人信息。此程序運用了GUI圖形化界面、使用了條件語句,case語句,使用戶可以對菜單進展選擇,并將選擇結(jié)果保存在臨時文件中,便于進一步操作計算。程序的源代碼為

27、:#!/bin/shgdialog -title Questionnaire -yesno Will you participate in this survey 9 18if( $ != 0 ); then gdialog -infobo* Thank you sleep 1 gdialog -clear e*it 0figdialog -title Questionnaire -msgbo* This is a survey about your personal information 9 18gdialog -title Questionnaire -inputbo* Enter yo

28、ur name 9 18 2name.t*t_name=$(cat name.t*t)gdialog -menu $_name, what is your major 9 18 3 1 Liberal Art 2 Science3 puter Science 2choice.t*t_choice=$(cat choice.t*t)case $_choice in 1) gdialog -title Questionnaire -msgbo* Good choice 9 18 ; 2) gdialog -title Questionnaire -msgbo* E*cellent 9 18 ; *

29、) gdialog -title Questionnaire -checklist Choose the lanuage you learned 9 18 5 1 C off 2 C+ off 3 Java off 4 Ruby off 5 Delpi off;esacsleep 1gdialog -cleare*it 0問題1分析整個程序的功能層次圖;2在程序中提取5條新語句,或您認為有用的語句,分析它所對應(yīng)的功能;3仿照程序,請編寫類似功能屬于自己開發(fā)的小程序。實驗結(jié)果記錄實驗結(jié)果分析七、實驗心得(思考和意見)Linu*程序設(shè)計實驗報告4Linu*系統(tǒng)C開發(fā)工具一、實驗?zāi)康?掌握linu*

30、環(huán)境下C程序的編輯、編譯、運行等操作;2掌握多文件系統(tǒng)的編譯及連接庫存的生成、應(yīng)用;3初步掌握gdb調(diào)度方法;4初步掌握makefile工程文件的編寫與使用;5掌握系統(tǒng)函數(shù)的應(yīng)用。二、實驗任務(wù)與要求1.函數(shù)庫的創(chuàng)立;2.makefile工程文件的編寫;3.應(yīng)用gdb調(diào)試程序;4.使用GCC編譯時連接庫的使用。三、實驗工具與準(zhǔn)備計算機PC機,Linu* Redhat Fedora Core6操作系統(tǒng)四、實驗步驟與操作指導(dǎo)任務(wù)1.調(diào)試以下程序。程序通過創(chuàng)立一個小型函數(shù)庫,它包含兩個函數(shù),然后在一個例如程序中調(diào)用其中一個函數(shù)。這兩個函數(shù)分別是pro1和pro2。按下面步驟生成函數(shù)庫及測試函數(shù)庫。步驟

31、1 為兩個函數(shù)分別創(chuàng)立各自的源文件將它們分別命名為pro1.c和pro2.c。rootlocalhost root# cat pro1.c#include void pro1(int arg)printf(hello:%dn,arg) ;rootlocalhost root# cat pro2.c#include void pro2(char *arg)printf(您好:%sn,arg) ;步驟2 分別編譯這兩個函數(shù),產(chǎn)生要包含在庫文件中的目標(biāo)文件。這通過調(diào)用帶有-c選項的gcc編譯器來實現(xiàn),-c選項的作用是阻止編譯器創(chuàng)立一個完整的程序,gcc將把源程序編譯成目標(biāo)程序,文件名為以.o結(jié)尾。如

32、果此時試圖創(chuàng)立一個完整的程序?qū)⒉粫晒?,因為還未定義main函數(shù)。rootlocalhost root# gcc -c pro1.c pro2.crootlocalhost root# ls *.opro1.o pro2.o步驟3 現(xiàn)在編寫一個調(diào)用pro2函數(shù)的程序。首先,為庫文件創(chuàng)立一個頭文件lib.h。這個頭文件將聲明庫文件中的函數(shù),它應(yīng)該被所有希望使用庫文件的應(yīng)用程序所包含。rootlocalhost root# cat lib.h/*lib.h:pro1.c,pro2.c*/void pro1(int);void pro2(char *);步驟4主程序program.c非常簡單。它包含

33、庫的頭文件并且調(diào)用庫中的一個函數(shù)。rootlocalhost root# cat program.c#include lib.hint main()pro2(Linu* world);e*it(0);步驟5 現(xiàn)在,來編譯并測試這個程序。暫時為編譯器顯式指定目標(biāo)文件,然后要求編譯器編譯的文件并將其與預(yù)先編譯好的目標(biāo)模塊pro2.o。rootlocalhost root# gcc -c program.crootlocalhost root# gcc -o program program.o pro2.orootlocalhost root# ./program您好:Linu* world步驟6

34、現(xiàn)在,創(chuàng)立并使用一個庫文件。用ar程序創(chuàng)立一個歸檔文件并將目標(biāo)文件添加進去。這個程序之所以稱為ar,是因為它將假設(shè)干單獨的文件歸并到一個大的文件中以創(chuàng)立歸檔文件。注意,也可以用ar程序來創(chuàng)立任何類型文件的歸檔文件。rootlocalhost root# ar crv libfoo.a pro1.o pro2.o函數(shù)庫現(xiàn)在即可使用了。可以在編譯器命令行的文件列表中添加該庫文件以創(chuàng)立程序,如下所示:rootlocalhost root# gcc -o program program.o libfoo.arootlocalhost root# ./program您好:Linu* world也可以用-

35、l選項來訪問函數(shù)庫,但是因為其未保存在標(biāo)準(zhǔn)位置,所以必須用-L選項來指示gcc在何處可以找到它,如下所示:rootlocalhost root#gcc -o program program.o -L. -lfoo-L.選項指示編譯器在當(dāng)前目錄.中查找函數(shù)庫。-lfoo選項指示編譯器使用名為libfoo.a的函數(shù)庫或者名為libfoo.so的共享庫,如果它存在的話。要查看目標(biāo)文件、函數(shù)庫或可執(zhí)行文件里包含的函數(shù), 可使用nm命令。如果查看program和libfoo.a,就會看到函數(shù)庫libfoo.a中包含pro1和pro2兩個函數(shù),而 program里只包含函數(shù)pro2。創(chuàng)立程序時,它只包含函

36、數(shù)庫中它實際需要的函數(shù)。雖然程序中的頭文件包含函數(shù)庫中所有函數(shù)的聲明,但這并不將整個函數(shù)庫包含在最終的程序中。問題:1按照給出的步驟1-6調(diào)試程序;2編寫兩個函數(shù),其中一個求數(shù)組中的最大值與最小值,另一函數(shù)求*一數(shù)的個數(shù)及main函數(shù),建立一個庫,對程序進展調(diào)試;3試寫出問題2中的makefile工程文件。任務(wù)2.調(diào)試以下程序。#includeint main()char passwd13;char *key;char slat2;key= getpass(Input First Password:);slat0=key0;slat1=key1;strcpy(passwd,crypt(key

37、slat);key=getpass(Input Second Password:);slat0=passwd0;slat1=passwd1;printf(After crypt(),1st passwd :%sn,passwd);printf(After crypt(),2nd passwd:%s n,crypt(key slat);請寫出調(diào)試命令。任務(wù)3.程序設(shè)計題。在home/kk目錄下編寫一個a.h庫文件,在root目錄下編寫一個含main函數(shù)的主程序,在main函數(shù)中調(diào)用在a.h中的一個函數(shù)。任務(wù)4. 調(diào)試以下程序。調(diào)試目的是實現(xiàn)多文件編譯。文件構(gòu)造是: 1bubble.h 存放函數(shù)b

38、ubble的聲明。 2bubble.c 存放函數(shù)bubble的實現(xiàn)。 3main.c 存放main函數(shù)實現(xiàn),其中調(diào)用了bubble函數(shù)。 4補充完整makefile文件其中各文件中的代碼如下:bubble.h#ifndef _BUBBLE_H_#define _BUBBLE_H_void bubble(int* a, int n);#endif / _BUBBLE_H_bubble.c#include bubble.hvoid bubble(int* a, int n)int i, j, t;for(i = 1; i n; i+)for(j = 0; j aj + 1)t = aj;aj =

39、aj + 1;aj + 1 = t;main.c#include #include bubble.h#define COUNT 10int main(void)int i;int aCOUNT = 3, 5, 4, 8, 9, 6, 2, 1, 7, 0;bubble(a, COUNT);for(i = 0; i COUNT; i+)printf(%d , ai);printf(n);return 0;MakefileCC = gccFLAGS = -Wall -O2main: main.o bubble.o請補充完整makefile文件任務(wù)5. 程序調(diào)試。程序的功能是輸入兩個整數(shù),輸出兩個整

40、數(shù)間的所有自然數(shù)。步驟1 設(shè)計編輯源程序代碼。rootlocalhost root#vim 4-3.c程序代碼如下:#include int num(int *, int y); int main() int a1,a2,min_int; printf(請輸入第一個整數(shù):);scanf(%d,&a1); printf(請輸入第二個整數(shù):);scanf(%d,&a2); num(a1,a2); int num(int *, int y) int temp,i; if (*y)temp=*;*=y;y=temp;for(i=*;i=y;i+) printf(%5d,i);printf(n);ret

41、urn 0;步驟2 用gcc編譯程序。在編譯的時候要加上選項-g。這樣編譯出的可執(zhí)行代碼中才包含調(diào)試信息,否則之后gdb無法載入該可執(zhí)行文件,請寫出編譯命令。rootlocalhost root#步驟3 進入gdb調(diào)試環(huán)境。gdb進展調(diào)試的是可執(zhí)行文件,因此要調(diào)試的是4-3而不是4-3.c,輸入如下,請輸入gdb的調(diào)試命令:rootlocalhost root#回車后就進入了gdb調(diào)試模式。GNU gdb Red Hat Linu* (5.3post-0.20021129.18rh)Copyright 2003 Free Software Foundation, Inc.GDB is free

42、 software, covered by the GNU General Public License, and you arewele to change it and/or distribute copies of it under certain conditions.Type show copying to see the conditions.There is absolutely no warranty for GDB. Type show warranty for details.This GDB was configured as i386-redhat-linu*-gnu.

43、(gdb)圖4.1 進入gdb調(diào)試環(huán)境可以看到,在gdb的啟動畫面中有g(shù)db的版本號、使用的庫文件等信息,在gdb的調(diào)試環(huán)境中,提示符是(gdb)。步驟4 用gdb調(diào)試程序。1查看源文件在gdb中輸入l(list)就可以查看程序源代碼,一次顯示10行??梢钥闯觯琯db列出的源代碼中明確地給出了對應(yīng)的行號,這樣可以大大方便代碼的定位。2設(shè)置斷點設(shè)置斷點在調(diào)試程序時是一個非常重要的手段,它可以使程序到一定位置暫停運行。軟件工程師可以在斷點處查看變量的值、堆棧情況等,從而找出代碼的問題所在。在gdb中設(shè)置斷點命令是b(break),后面跟行號或者函數(shù)名。不指定具體行號的斷點設(shè)置在b(break)后面

44、跟函數(shù)名。本例可以輸入break num。3查看斷點信息設(shè)置完斷點后,可以用命令info b(info break)查看斷點信息。4運行程序接下來可以運行程序,可以輸入r(run)開場運行程序。5查看與設(shè)置變量值調(diào)試程序重要手段就是查看斷點處的變量值。程序運行到斷點處會自動暫停,此時輸入p變量名可查看指定變量的值。調(diào)試程序時,假設(shè)需要修改變量值,可程序運行到斷點處時,輸入set 變量=設(shè)定值,例如,給變量a2 賦值100,輸入set a2=100。gdb在顯示變量值時都會在對應(yīng)值前加$n標(biāo)記,它是當(dāng)前變量值的引用標(biāo)記,以后想再引用此變量,可以直接使用$n,提高了調(diào)試效率。6單步運行很多情況下,

45、調(diào)試的時候要單步運行程序。在斷點處輸入 n(ne*t)或者s(step)可單步運行。它們之間的區(qū)別在于:假設(shè)有函數(shù),調(diào)用時,s會進入該函數(shù),而n不會進入該函數(shù)。7繼續(xù)運行程序在查看完變量或堆棧情況后可以輸入c(continue)命令恢復(fù)程序的正常運行,把剩余的程序執(zhí)行完,并顯示執(zhí)行結(jié)果。8退出gdb環(huán)境退出gdb環(huán)境只要輸入q(quit)命令,回車后退出gdb環(huán)境。五、實驗結(jié)果記錄六、實驗結(jié)果分析七、實驗心得(思考和意見)Linu*程序設(shè)計實驗報告5Linu*環(huán)境系統(tǒng)函數(shù)的應(yīng)用一、實驗?zāi)康?掌握隨機數(shù)函數(shù)的使用方法;2掌握構(gòu)造體struct timeval的成員tv_sec與tv_usec的應(yīng)

46、用;3掌握時間函數(shù)time、localtime、gettimeofday的使用;4. 掌握系統(tǒng)函數(shù)system、tcgetattr等的應(yīng)用。二、實驗任務(wù)與要求1. 隨機數(shù)函數(shù)的使用;2. 猜數(shù)游戲的程序;3. 構(gòu)造體struct timeval的成員tv_sec與tv_usec的應(yīng)用;4. 時間函數(shù)在簡單記事本程序中的應(yīng)用;5. 時間函數(shù)在計時器,有暫停、查看、重置程序設(shè)計設(shè)計中的應(yīng)用。三、實驗工具與準(zhǔn)備計算機PC機,Linu* Redhat Fedora Core6操作系統(tǒng)。四、實驗步驟與操作指導(dǎo)任務(wù)1.調(diào)試以下程序。產(chǎn)生10個介于1到10之間的隨機數(shù)值。提示函數(shù)rand( )會返回一個0

47、RAND_MA*其值為2147483647之間的隨機值。產(chǎn)生一個大于等于0、小于1的數(shù),此數(shù)可表示為:rand()/(RAND_MA*+1.0)。rootlocalhost root#vim 5-1.c程序代碼如下:#include #include stdio.hint main() int i,j; srand(int)time(0); for(i=0;i10;i+) j=1+(int)(10.0*rand()/(RAND_MA*+1.0);printf( %d ,j); printf(n);問題論述語句srand(int)time(0);的功能;修改程序,產(chǎn)生50個100-1000之間的

48、隨機整數(shù);任務(wù)2程序設(shè)計。編寫一個猜數(shù)游戲的程序,先產(chǎn)生一個隨機數(shù),要求被試輸入一個數(shù),計算時機提示猜大了,猜小了或恭喜您猜中了,直到猜中,退出程序。修改程序,限定猜數(shù)的次數(shù)作為難度系數(shù),除了提示猜大了,猜小了或恭喜您猜中了外,還有次數(shù)已到,猜數(shù)失敗。任務(wù)3調(diào)試以下程序。應(yīng)用構(gòu)造體struct timeval的成員tv_sec與tv_usec顯示系統(tǒng)時間的秒與微秒,并測試輸出成員tv_sec與tv_usec這段程序所用時間。提示程序設(shè)計的步驟為用函數(shù)gettimeofday讀取系統(tǒng)時間,顯示系統(tǒng)中的秒與微妙,顯示Greenwich的時間差,測試系統(tǒng)時間tvz,計算時間差。操作步驟步驟1 編輯源

49、程序代碼。rootlocalhost root#vim 5-2.c程序代碼如下: #include#includeint main()struct timeval tv1,tv2;struct timezone tz;gettimeofday(&tv1,&tz);printf(tv_sec; %dn, tv1.tv_sec) ;printf(tv_usec; %dn,tv1.tv_usec);gettimeofday(&tv2,&tz);printf(tv2_usec-tv1_usec; %dn,tv2.tv_usec-tv1.tv_usec);return 0;問題1修改以上程序,分別編寫一

50、個有參數(shù)的函數(shù)及宏定義,研究它們的調(diào)用效率問題;2 編寫一個程序,如查找或排序效率問題,查找算法有順序、二分查找等等。任務(wù)4.編寫程序。編寫一個簡單的記事本,其功能是實現(xiàn)輸入任務(wù)及任務(wù)截止時間,通過系統(tǒng)時間和日期函數(shù)的使用,可計算輸出任務(wù)的剩余時間。提示:printf(請輸入任務(wù)截止時間,分別輸入日期131,小時023、分、秒對應(yīng)的數(shù)字n);scanf(%d%d%d%d, &i,&j,&k,&l);為對應(yīng)的輸入時間,即余下時間可以從以下語句中得到。time (&timep);p=localtime(&timep);a=(i-p-tm_mday)*24*3600+( j-p-tm_hour)*3

51、600+ (k-p-tm_min)*60+ l-p-tm_sec;在余下時間為0時可以考慮響鈴及顯示任務(wù)。任務(wù)5調(diào)試以下程序。#include#include#include#include#includeint mygetch() /實時返回鍵盤被按下的值struct termios oldt, newt;int ch;tcgetattr(STDIN_FILENO,&oldt);newt = oldt;newt.c_lflag &= (ICANON|ECHO);tcsetattr(STDIN_FILENO,TCSANOW,&newt);ch = getchar();tcsetattr(STD

52、IN_FILENO,TCSANOW,&oldt);return ch;int main()char c, v;int i, rn = 0, n;struct timeval tv1, tv2;struct timezone tz;double sum = 0, prob = 0;srand(unsigned)time(NULL);printf(Please input the number of tests:);scanf(%d,&n);getchar();while(n) for(i = 0; i n; i+) c = (char)(1.0+(int)(25.0*rand()/RAND_MA

53、*)+65.0); printf(0335;5H%c,c); sleep(0.5); gettimeofday(&tv1,&tz); system(clear); v = mygetch(); gettimeofday(&tv2,&tz); if(v = c) rn+;sum+=(tv2.tv_sec-tv1.tv_sec)+(tv2.tv_usec-tv1.tv_usec)/1000000.0; prob = rn / n;system(clear); if(prob = 0)/全都按錯時鼓勵下并提醒是不是忘記翻開大寫開關(guān) printf(sorry, you score 0, please

54、try again, maybe you forgot to switch the Caps Lock onn);else printf(the accuracy is %lf, and the average time of response is %lf secsn,prob,sum/rn);printf(Please input the number of tests(input 0 to quit):);scanf(%d,&n);getchar();rn = 0;sum = 0; /把rn和sum清零問題1調(diào)試程序,分析并畫出程序執(zhí)行的流程圖;2 修改程序,編寫界面更為優(yōu)美的測試程序。

55、任務(wù)6.調(diào)試以下程序。程序的功能是計時器,有暫停、查看、重置等功能#include#include#include#includeint main()long int begin,sec,stop;struct timeval tv1, tv2;struct timezone tz;char tmp;begin=0;stop=0;sec=0;system(clear);printf(計時器程序單位sn);printf(輸入b(begin)計時器開場計時n);printf(輸入w(watch)查看已經(jīng)累計時間n);printf(輸入r(rest)重新開場計時n);printf(輸入s(stop)

56、暫停計時器n);printf(輸入e(end)完畢計時器n);while(1)scanf(%c,&tmp);if(tmp=b)if(begin=1&stop=0) printf(計時器已經(jīng)啟動!n);if(begin=0&stop=0) printf(計時器啟動n);gettimeofday(&tv1,&tz);sec=0;begin=1;if(stop=1)gettimeofday(&tv1,&tz);stop=0;printf(暫停完畢!n);if(tmp=w)if(stop=0)gettimeofday(&tv2,&tz);printf(已經(jīng)計時%ld秒n,sec+tv2.tv_sec-

57、tv1.tv_sec);if(stop=1) printf(已經(jīng)計時%ld秒n,sec);if(tmp=s)if(stop=1)printf(計時已經(jīng)暫停!n);if(stop=0)gettimeofday(&tv2,&tz);sec=sec+tv2.tv_sec-tv1.tv_sec;printf(計時暫停,已經(jīng)計時%ld秒n,sec);stop=1;if(tmp=r)gettimeofday(&tv2,&tz);printf(已經(jīng)計時%ld秒n,sec+tv2.tv_sec-tv1.tv_sec);printf(計時器在5秒后被重置!n);sleep(5);begin=0;sec=0;st

58、op=0;system(clear);printf(計時器程序單位sn);printf(輸入b(begin)計時器開場計時n);printf(輸入w(watch)查看已經(jīng)累計時間n);printf(輸入r(rest)重新開場計時n);printf(輸入s(stop)暫停計時器n);printf(輸入e(end)完畢計時器n);if(tmp=e) break;return 0;五、實驗結(jié)果記錄六、實驗結(jié)果分析七、實驗心得(思考和意見)Linu*程序設(shè)計實驗報告6Linu*文件I/O操作1一、實驗?zāi)康?掌握函數(shù)stat中文件屬性的應(yīng)用。2掌握系統(tǒng)函數(shù)system、opendir、scandir的使

59、用。3初步掌握struct dirent 的構(gòu)造體變量的使用方法。4掌握文件阻塞與非阻塞I/O的操作。5. 掌握文件屬性的判斷。二、實驗任務(wù)與要求1.測試文件S_IRUSR、S_IWUSR、S_IRGRP、S_IROTH屬性。2.應(yīng)用system函數(shù)對的網(wǎng)絡(luò)連通情況進展測試。3.應(yīng)用readdir函數(shù)顯示文件和子目錄。4.文件屬性的判斷。5.阻塞I/O文件操作的程序設(shè)計。三、實驗工具與準(zhǔn)備計算機PC機,Linu* Redhat Fedora Core6操作系統(tǒng)四、實驗步驟與操作指導(dǎo)任務(wù)1.程序設(shè)計。設(shè)計程序應(yīng)用system函數(shù)建立/home/liu文件,應(yīng)用chmod函數(shù)使文件liu具有S_I

60、RUSR、S_IWUSR、S_IRGRP、S_IROTH屬性,最后應(yīng)用函數(shù)stat獲取文件的大小與建立的時間。 任務(wù)2.程序設(shè)計。編寫程序在程序中能夠?qū)Φ木W(wǎng)絡(luò)連通情況進展測試。任務(wù)3.調(diào)試以下程序。程序的功能是要求打印系統(tǒng)目錄/etc/rc.d下所有的文件和子目錄的名字。程序代碼如下: #include#include#include#includeint main()DIR * dir;struct dirent * ptr;dir=opendir(/etc/rc.d);printf(/etc/rc.d目錄中文件或子目錄有:n);while(ptr = readdir(dir)!=NULL)

溫馨提示

  • 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

提交評論