版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)二 linux/unix環(huán)境程序設(shè)計(jì)基礎(chǔ)一. 實(shí)驗(yàn)?zāi)康?. 掌握使用linux環(huán)境下的常用編輯工具編輯程序的方法。2. 熟悉shell程序設(shè)計(jì)的基本技術(shù)。3. 掌握linux環(huán)境下使用gnu gcc/gdb等工具進(jìn)行程序設(shè)計(jì)的基本技術(shù)。二. 實(shí)驗(yàn)指導(dǎo)1. linux的文本編輯工具在linux環(huán)境下可使用vi、emacs、kate、kedit等編輯工具編寫源代碼,其中emacs和vi可在字符模式下運(yùn)行,而kate和kedit需在圖形用戶界面下使用,都是全屏幕編輯工具,使用簡(jiǎn)單,kate帶有一個(gè)文件列表區(qū)、一個(gè)文件編輯區(qū)和一個(gè)命令輸入?yún)^(qū),是一個(gè)編寫程序的好工具。啟動(dòng)vi、kate和kedit編
2、輯文件的命令行方法如下:$ vi 程序文件名 $ kate 程序文件名 $ kedit 程序文件名kate和kedit的圖形界面啟動(dòng)方法:.開始菜單|運(yùn)行命令|kate開始菜單|運(yùn)行命令|kedit2. 文件編輯器vi vi是在unix 上被廣泛使用的中英文編輯軟件。vi是visual editor的縮寫,是unix提供給用戶的一個(gè)窗口化編輯環(huán)境。進(jìn)入vi,直接執(zhí)行vi編輯程序即可。例:$vi test.c顯示器出現(xiàn)vi的編輯窗口,同時(shí)vi會(huì)將文件復(fù)制一份至緩沖區(qū)(buffer)。vi先對(duì)緩沖區(qū)的文件進(jìn)行編輯,保留在磁盤中的文件則不變。編輯完成后,使用者可決定是否要取代原來舊有的文件。1、vi
3、的工作模式vi提供二種工作模式:輸入模式(insert mode)和命令模式(command mode)。使用者進(jìn)入vi后,即處在命令模式下,此刻鍵入的任何字符皆被視為命令,可進(jìn)行刪除、修改、存盤等操作。要輸入信息,應(yīng)轉(zhuǎn)換到輸入模式。(1)命令模式在輸入模式下,按esc可切換到命令模式。命令模式下,可選用下列指令離開vi:q!離開vi,并放棄剛在緩沖區(qū)內(nèi)編輯的內(nèi)容:wq將緩沖區(qū)內(nèi)的資料寫入磁盤中,并離開vi:zz同wq:x同wq:w將緩沖區(qū)內(nèi)的資料寫入磁盤中,但并不離開vi:q離開vi,若文件被修改過,則要被要求確認(rèn)是否放棄修改的內(nèi)容,此指令可與:w配合使用(2)命令模式下光標(biāo)的移動(dòng) h左移一
4、個(gè)字符j下移一個(gè)字符k上移一個(gè)字符l右移一個(gè)字符0移至該行的首$移至該行的末移至該行的第一個(gè)字符處h移至窗口的第一列m移至窗口中間那一列l(wèi)移至窗口的最后一列g(shù)移至該文件的最后一列w, w下一個(gè)單詞 (w 忽略標(biāo)點(diǎn))b, b上一個(gè)單詞 (b 忽略標(biāo)點(diǎn))+移至下一列的第一個(gè)字符處-移至上一列的第一個(gè)字符處(移至該句首)移至該句末移至該段首移至該段末ng移至該文件的第n列n+移至光標(biāo)所在位置之后第n列n-移至光標(biāo)所在位置之前第n列(3)輸入模式輸入以下命令即可進(jìn)入vi輸入模式:a(append) 在光標(biāo)之后加入資料a 在該行之末加入資料i(insert)在光標(biāo)之前加入資料i 在該行之首加入資料o(o
5、pen)新增一行于該行之下,供輸入資料用o新增一行于該行之上,供輸入資料用dd刪除當(dāng)前光標(biāo)所在行x刪除當(dāng)前光標(biāo)字符x刪除當(dāng)前光標(biāo)之前字符u撤消重做f查找s 替換,例如:將文件中的所有fox換成duck,用:%s/fox/duck/gesc離開輸入模式更多用法見 info vi3. shell程序設(shè)計(jì)基礎(chǔ)shell是用戶與linux操作系統(tǒng)之間的接口,是命令語言、命令解釋程序和程序設(shè)計(jì)語言的總稱。用戶在提示符下輸入的命令都由shell先加以解釋,然后傳給linux內(nèi)核,或調(diào)用相關(guān)程序執(zhí)行。shell支持絕大多數(shù)高級(jí)語言中能見到的程序元素,如函數(shù)、變量、數(shù)組和程序控制結(jié)構(gòu),可以解釋執(zhí)行包含這些結(jié)構(gòu)
6、的shell程序。linux中有多種shell,如bash、ksh、csh等,默認(rèn)的是bash。當(dāng)用戶打開終端后,系統(tǒng)為該終端建立一個(gè)程序shell的進(jìn)程,由進(jìn)程去讀入、識(shí)別和執(zhí)行用戶輸入的各種命令。linux命令有可執(zhí)行二進(jìn)制程序和shell程序,shell程序類似于dos中的批處理程序。(1) shell程序的編輯shell程序可用編輯工具vi、kate、kedit等編寫,并保存為一個(gè)磁盤文件。shell程序的第一行通常為#!/bin/bash,告知linux使用/bin/bash解釋執(zhí)行該程序。(2) shell程序的執(zhí)行方法一:bash shell文件名方法二:直接執(zhí)行。將shell程
7、序的權(quán)限設(shè)置為644。鍵入 ./shell程序名(3) i/o重定向shell程序中經(jīng)常涉及到輸入輸出。linux有通過3個(gè)特殊文件實(shí)現(xiàn)信息的輸入輸出:標(biāo)準(zhǔn)輸入(stdin, 文件描述符為0)、標(biāo)準(zhǔn)輸出(stdout,文件描述符為1)和標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr, 文件描述符為2)。shell通過標(biāo)準(zhǔn)輸入接受用戶的鍵盤命令,將執(zhí)行結(jié)果送往標(biāo)準(zhǔn)輸出從終端顯示,而將出錯(cuò)信息寫到標(biāo)準(zhǔn)錯(cuò)誤輸出,而從終端顯示。linux通過i/o重定向,可以改從文件輸入命令,將輸出結(jié)果或出錯(cuò)信息改送文件。以下是一些示例:1) 輸出重定向命令格式:command file 或command file 將命令輸出信息寫到文
8、件例:ls l fileinfo 將當(dāng)前目錄下的文件信息以長(zhǎng)格式方式保存到文件fileinfo中,覆蓋原來的內(nèi)容;datefileinfo 將date命令的輸出追加到文件fileinfo后;2) 輸入重定向命令格式:command file 從文件讀命令信息例:wc& file 或command &file(4) 管道將前一命令的輸出作為后一命令的輸入。命令格式:命令1|命令2|命令3例:who | sort user_list 將who命令的結(jié)果排序,寫入文件user_list。(5) shell變量shell變量只有字符類型,其值為字符串,變量名以字母或下劃線開始,大小寫敏感,用$var的
9、形式引用名為var的變量的值。定義格式:變量名=變量值例:$ no=10$ hello=”hello everybody”$ echo $no$ echo $hello環(huán)境變量:shell定義的與工作環(huán)境有關(guān)的變量,可由用戶修改。home保存登錄主目錄的完全路徑名path保存命令搜索路徑,多個(gè)路徑間以”:”隔開pwd當(dāng)前工作目錄的絕對(duì)路徑名ps1主提示符預(yù)定義變量:由shell定義,用戶不能修改。$? 前一命令執(zhí)行的返回狀態(tài)$當(dāng)前進(jìn)程的pid位置變量:shell程序命令行參數(shù)由shell寫到位置變量中,可在程序中引用$0當(dāng)前進(jìn)程的進(jìn)程名$1第1個(gè)命令行參數(shù)$2第2個(gè)命令行參數(shù)$3第3個(gè)命令行參
10、數(shù)$#位置參數(shù)個(gè)數(shù)(6) 條件執(zhí)行語句格式:if 條件then 命令行else命令行fi條件格式: 測(cè)試語句 或 test 測(cè)試語句文件測(cè)試: -e filename 如果文件存在-r filename如果文件存在并可讀-x filename如果文件存在且可執(zhí)行-w filename如果文件存在且可寫-d filename如果文件存在且為目錄 -f filename如果文件存在且為普通文件數(shù)值測(cè)試:test n1 eq n2整數(shù)n1和n2相等test n1 ne n2 整數(shù)n1和n2不相等test n1 gt n2 整數(shù)n1大于n2test n1 ge n2整數(shù)n1大于或等于n2字符串測(cè)試:t
11、est s測(cè)試字符串非空test s1=s2字符串s1等于s2test s1!=s2字符串s1不等于s2test z s字符串s為空串例:#!/bin/bash if $# -ne 1 then echo “usage - $0 file-name”exit 1fiif test f $1then echo “$1 file exists”elseecho “sorry, $1 file does not exits” fi(7) case語句利用case語句可根據(jù)字符串或變量的值從多個(gè)選項(xiàng)中選擇一項(xiàng)執(zhí)行格式:case string inexpr1)命令行1;expr2)命令行2;*)其它命令
12、行;esac例:從命令行輸入一個(gè)簡(jiǎn)單的算術(shù)表達(dá)式,計(jì)算結(jié)果:#!/bin/bashif test $#=3thencase 2 in+) let z=$1+$3 ;-) let z=$1-$3 ;/) let z=$1/$3 ;x|x) let z=$1*$3 ;*) echo errorexit 1;esacecho answer is $zfi測(cè)試:$./test 5 + 7(8) 循環(huán)for循環(huán)格式:for 變量名 in 數(shù)值列表do命令行donefor循環(huán)例:#!/bin/bashfor i in 1 2 3 4 5doecho welcome $i timesdonewhile循環(huán)格
13、式:while 命令行1do命令行2donewhile循環(huán)例:顯示number=10; number=20;一直到number=100。#!/bin/bashi=1while $i le 10doecho number=expr $i *10 ; expr表示對(duì)表達(dá)式求值i= expr $i+1donebreak和continue:可于用終止循環(huán)和開始下一重循環(huán)(9) shell程序調(diào)試shell程序的調(diào)試主要通過利用shell解釋程序的-v和-x選項(xiàng)跟蹤程序的執(zhí)行過程來實(shí)現(xiàn)。調(diào)用格式:bash 選項(xiàng) shell程序文件名選項(xiàng)含義:-v 當(dāng)讀入shell輸入行時(shí)把它們顯示出來-x 執(zhí)行命令時(shí)把
14、命令和它們的參數(shù)顯示出來4. gnu c編譯器linux上可用的c編譯器是gnu c編譯器,它建立在自由軟件基金會(huì)編程許可證的基礎(chǔ)上,因此可以自由發(fā)布。linux 上的gnu c編譯器(gcc)是一個(gè)全功能的anci c兼容編譯器,而一般unix(如sco unix)用的編譯器是cc。下面介紹gcc和一些gcc編譯器最常用的選項(xiàng)。(1) 使用gcc通常后跟一些選項(xiàng)和文件名來使用gcc編譯器。gcc命令的基本用法如下: gcc options filenames命令行選項(xiàng)指定的編譯過程中的具體操作(2) gcc常用選項(xiàng)gcc有超過100個(gè)的編譯選項(xiàng)可用,這些選項(xiàng)中的許多可能永遠(yuǎn)都不會(huì)用到,但一些
15、主要的選項(xiàng)將會(huì)頻繁使用。很多的gcc選項(xiàng)包括一個(gè)以上的字符,因此必須為每個(gè)選項(xiàng)指定各自的連字符,并且就像大多數(shù)linux 命令一樣不能在一個(gè)單獨(dú)的連字符后跟一組選項(xiàng)。例如,下面的命令是不同的:gcc -p-g test.cgcc -pg test.c第一條命令告訴gcc編譯test.c時(shí)為prof命令建立剖析(profile)信息并且把調(diào)試信息加入到可執(zhí)行文件里。第二條命令告訴gcc只為gprof命令建立剖析信息。當(dāng)不用任何選項(xiàng)編譯一個(gè)程序時(shí),gcc將建立(假定編譯成功)一個(gè)名為a.out的可執(zhí)行文件。例如, gcc test.c編譯成功后,當(dāng)前目錄下就產(chǎn)生了一個(gè)a.out文件。也可用-o選項(xiàng)
16、來為即將產(chǎn)生的可執(zhí)行文件指定一個(gè)文件名來代替a.out。例如:gcc o count count.c此時(shí)得到的可執(zhí)行文件就不再是a.out,而是count。gcc也可以指定編譯器處理步驟多少。-c選項(xiàng)告訴gcc僅把源代碼編譯為目標(biāo)代碼而跳過匯編和連接步驟。這個(gè)選項(xiàng)使用得非常頻繁因?yàn)樗幾g多個(gè)c程序時(shí)速度更快且更易于管理。默認(rèn)時(shí)gcc建立的目標(biāo)代碼文件有一個(gè).o的擴(kuò)展名。(3) 執(zhí)行文件 格式: ./可執(zhí)行文件名例:./a.out ./count5. gdb調(diào)試工具linux包含了一個(gè)叫g(shù)db的gnu調(diào)試程序。gdb是一個(gè)用來調(diào)試c和c+程序的強(qiáng)有力調(diào)試器。它使你能在程序運(yùn)行時(shí)觀察程序的內(nèi)部結(jié)構(gòu)
17、和內(nèi)存的使用情況。它具有以下一些功能:監(jiān)視程序中變量的值;設(shè)置斷點(diǎn)以使程序在指定的代碼行上停止執(zhí)行;一行行的執(zhí)行代碼。以下是利用gdb進(jìn)行調(diào)試的步驟:(1) 調(diào)試編譯代碼為了使gdb正常工作,必須使你的程序在編譯時(shí)包含調(diào)試信息。調(diào)試信息里包含你程序里的每個(gè)變量的類型和在可執(zhí)行文件里的地址映射以及源代碼的行號(hào)。gdb利用這些信息使源代碼和機(jī)器碼相關(guān)聯(lián)。在編譯時(shí)用 g 選項(xiàng)打開調(diào)試選項(xiàng)。(2) gdb基本命令命 令描 述file裝入欲調(diào)試的可執(zhí)行文件kill終止正在調(diào)試的程序list列出產(chǎn)生執(zhí)行文件的源代碼部分next執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部step執(zhí)行一行源代碼并進(jìn)入函數(shù)內(nèi)部run執(zhí)行當(dāng)前
18、被調(diào)試的程序quit終止gdbwatch監(jiān)視一個(gè)變量的值而不管它何時(shí)被改變break在代碼里設(shè)置斷點(diǎn),使程序執(zhí)行到這里時(shí)被掛起make不退出gdb就可以重新產(chǎn)生可執(zhí)行文件shell不離開gdb就執(zhí)行unix shell 命令(3) 應(yīng)用舉例1)設(shè)有一源程序greet.c2)編譯,gcc -ggdb o greet greet.c,出錯(cuò)3)gdb greet ,出現(xiàn)提示符(gdb),此時(shí)可在提示符下輸入gdb的命令了,如:(gdb)run(gdb)list4)退出調(diào)試狀態(tài),返回系統(tǒng)提示符下, (gdb)quit6. linux環(huán)境下c/c+程序設(shè)計(jì)基礎(chǔ)在unix/linux環(huán)境下,開發(fā)應(yīng)用程序的
19、流程如圖2.1所示。源代碼編輯器編譯器:編譯、匯編庫文件連接程序:連接源程序:.c .cpp目標(biāo)程序:.o二進(jìn)制可執(zhí)行程序頭文件.h裝載程序:加載運(yùn)行內(nèi)存映象調(diào)試工具:調(diào)試程序打包工具:發(fā)行程序圖2.1 linux應(yīng)用程序開發(fā)流程一個(gè)應(yīng)用程序的開發(fā)大概包括5個(gè)過程:(1) 編輯程序。使用源代碼編輯器產(chǎn)生源代碼,c/c+語言的源程序后綴為.c和.cpp。(2) 編譯程序。使用編譯程序?qū)⒃闯绦蚓幾g成目標(biāo)代碼文件,目標(biāo)代碼文件的后綴通常為.o。unix/linux環(huán)境常用的編譯工具是gcc。(3) 鏈接程序。使用連接程序?qū)⒛繕?biāo)代碼文件與系統(tǒng)庫文件鏈接形成可執(zhí)行程序。連接程序通常與gcc集成在一起。(
20、4) 加載和運(yùn)行程序。將生成的可執(zhí)行程序加載到內(nèi)存運(yùn)行。(5) 調(diào)試程序。使用ddd/gdb等調(diào)試工具對(duì)程序進(jìn)行調(diào)試。ddd是gdb的圖形界面。(6) 打包發(fā)行程序。將完成了調(diào)試和測(cè)試的程序打包發(fā)行。下面使用一個(gè)示例說明在linux環(huán)境下開發(fā)一個(gè)應(yīng)用程序的過程。假定現(xiàn)在有一個(gè)c語言文件hw.c,其內(nèi)容如下:#include main()printf(hello worldn);exit(0);第一步:使用vi或kate等編輯工具編寫以上源程序,并取名為hw.c;第二步:使用gcc編譯鏈接源程序hw.c生成可執(zhí)行程序。命令格式:$ gcc -g -o 選項(xiàng)說明:-o 后面的參數(shù)指明生成的可執(zhí)行程
21、序名,如果沒有該選項(xiàng),則可執(zhí)行程序名為a.out -g在生成的可執(zhí)行二進(jìn)制程序中加入調(diào)試信息,以便進(jìn)行源代碼級(jí)調(diào)試本例命令:$ gcc g o hw hw.c第三步:運(yùn)行程序。命令格式為: $ ./hw第四步:如果程序需要調(diào)試,可以借助ddd/gdb進(jìn)行源代碼級(jí)的調(diào)試。啟動(dòng)調(diào)試命令是:$ ddd hw說明:ddd調(diào)試工具的用戶界面與vc+等開發(fā)環(huán)境很相似,可以在gui環(huán)境中設(shè)置斷點(diǎn)、單步執(zhí)行、檢查變量和寄存器的值等。三. 實(shí)驗(yàn)內(nèi)容1. 編輯、分析、理解和調(diào)試一個(gè)shell程序;2. 編輯、分析、理解和調(diào)試一個(gè)c/c+語言程序。四. 實(shí)驗(yàn)步驟(一)shell程序的分析、運(yùn)行與調(diào)試1. 使用kate、kedit和vi等編輯工具編輯shell程序renam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力管道工程竣工驗(yàn)收方案
- 建筑工程施工設(shè)計(jì)方案及安全措施方案
- 醫(yī)院急救藥品采購管理制度
- 工程施工合同(2篇)
- 運(yùn)動(dòng)中心塑膠跑道施工流程方案
- 淺析如何在自主學(xué)習(xí)課堂中滲透化學(xué)核心素養(yǎng)
- 學(xué)生矛盾處理協(xié)議書(2篇)
- VIVO廣告合同(可直接使用)
- 市政道路排水管道施工方案
- 智慧城市人行道建設(shè)方案
- 北京市道德與法治初一上學(xué)期期中試卷及答案指導(dǎo)(2024年)
- 高校實(shí)驗(yàn)室安全基礎(chǔ)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 四川省綿陽市高中2025屆高三一診考試物理試卷含解析
- B737-300輪艙部件圖
- 各種注射法(課堂PPT)
- 譯林牛津英語7A-unit3-Welcome-to-our-school教案(6課時(shí))
- 第五章 種內(nèi)與種間關(guān)系
- 飛利浦16排螺旋CT機(jī)操作規(guī)程(1)
- 油菜品種田間記載項(xiàng)目與標(biāo)準(zhǔn)
- 渣土車輛駕駛員管理制度
- 德力西系列變頻器說明書
評(píng)論
0/150
提交評(píng)論