版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗二 linux/unix環(huán)境程序設計基礎一. 實驗目的1. 掌握使用linux環(huán)境下的常用編輯工具編輯程序的方法。2. 熟悉shell程序設計的基本技術。3. 掌握linux環(huán)境下使用gnu gcc/gdb等工具進行程序設計的基本技術。二. 實驗指導1. linux的文本編輯工具在linux環(huán)境下可使用vi、emacs、kate、kedit等編輯工具編寫源代碼,其中emacs和vi可在字符模式下運行,而kate和kedit需在圖形用戶界面下使用,都是全屏幕編輯工具,使用簡單,kate帶有一個文件列表區(qū)、一個文件編輯區(qū)和一個命令輸入區(qū),是一個編寫程序的好工具。啟動vi、kate和kedit編
2、輯文件的命令行方法如下:$ vi 程序文件名 $ kate 程序文件名 $ kedit 程序文件名kate和kedit的圖形界面啟動方法:.開始菜單|運行命令|kate開始菜單|運行命令|kedit2. 文件編輯器vi vi是在unix 上被廣泛使用的中英文編輯軟件。vi是visual editor的縮寫,是unix提供給用戶的一個窗口化編輯環(huán)境。進入vi,直接執(zhí)行vi編輯程序即可。例:$vi test.c顯示器出現vi的編輯窗口,同時vi會將文件復制一份至緩沖區(qū)(buffer)。vi先對緩沖區(qū)的文件進行編輯,保留在磁盤中的文件則不變。編輯完成后,使用者可決定是否要取代原來舊有的文件。1、vi
3、的工作模式vi提供二種工作模式:輸入模式(insert mode)和命令模式(command mode)。使用者進入vi后,即處在命令模式下,此刻鍵入的任何字符皆被視為命令,可進行刪除、修改、存盤等操作。要輸入信息,應轉換到輸入模式。(1)命令模式在輸入模式下,按esc可切換到命令模式。命令模式下,可選用下列指令離開vi:q!離開vi,并放棄剛在緩沖區(qū)內編輯的內容:wq將緩沖區(qū)內的資料寫入磁盤中,并離開vi:zz同wq:x同wq:w將緩沖區(qū)內的資料寫入磁盤中,但并不離開vi:q離開vi,若文件被修改過,則要被要求確認是否放棄修改的內容,此指令可與:w配合使用(2)命令模式下光標的移動 h左移一
4、個字符j下移一個字符k上移一個字符l右移一個字符0移至該行的首$移至該行的末移至該行的第一個字符處h移至窗口的第一列m移至窗口中間那一列l(wèi)移至窗口的最后一列g移至該文件的最后一列w, w下一個單詞 (w 忽略標點)b, b上一個單詞 (b 忽略標點)+移至下一列的第一個字符處-移至上一列的第一個字符處(移至該句首)移至該句末移至該段首移至該段末ng移至該文件的第n列n+移至光標所在位置之后第n列n-移至光標所在位置之前第n列(3)輸入模式輸入以下命令即可進入vi輸入模式:a(append) 在光標之后加入資料a 在該行之末加入資料i(insert)在光標之前加入資料i 在該行之首加入資料o(o
5、pen)新增一行于該行之下,供輸入資料用o新增一行于該行之上,供輸入資料用dd刪除當前光標所在行x刪除當前光標字符x刪除當前光標之前字符u撤消重做f查找s 替換,例如:將文件中的所有fox換成duck,用:%s/fox/duck/gesc離開輸入模式更多用法見 info vi3. shell程序設計基礎shell是用戶與linux操作系統(tǒng)之間的接口,是命令語言、命令解釋程序和程序設計語言的總稱。用戶在提示符下輸入的命令都由shell先加以解釋,然后傳給linux內核,或調用相關程序執(zhí)行。shell支持絕大多數高級語言中能見到的程序元素,如函數、變量、數組和程序控制結構,可以解釋執(zhí)行包含這些結構
6、的shell程序。linux中有多種shell,如bash、ksh、csh等,默認的是bash。當用戶打開終端后,系統(tǒng)為該終端建立一個程序shell的進程,由進程去讀入、識別和執(zhí)行用戶輸入的各種命令。linux命令有可執(zhí)行二進制程序和shell程序,shell程序類似于dos中的批處理程序。(1) shell程序的編輯shell程序可用編輯工具vi、kate、kedit等編寫,并保存為一個磁盤文件。shell程序的第一行通常為#!/bin/bash,告知linux使用/bin/bash解釋執(zhí)行該程序。(2) shell程序的執(zhí)行方法一:bash shell文件名方法二:直接執(zhí)行。將shell程
7、序的權限設置為644。鍵入 ./shell程序名(3) i/o重定向shell程序中經常涉及到輸入輸出。linux有通過3個特殊文件實現信息的輸入輸出:標準輸入(stdin, 文件描述符為0)、標準輸出(stdout,文件描述符為1)和標準錯誤輸出(stderr, 文件描述符為2)。shell通過標準輸入接受用戶的鍵盤命令,將執(zhí)行結果送往標準輸出從終端顯示,而將出錯信息寫到標準錯誤輸出,而從終端顯示。linux通過i/o重定向,可以改從文件輸入命令,將輸出結果或出錯信息改送文件。以下是一些示例:1) 輸出重定向命令格式:command file 或command file 將命令輸出信息寫到文
8、件例:ls l fileinfo 將當前目錄下的文件信息以長格式方式保存到文件fileinfo中,覆蓋原來的內容;datefileinfo 將date命令的輸出追加到文件fileinfo后;2) 輸入重定向命令格式:command file 從文件讀命令信息例:wc& file 或command &file(4) 管道將前一命令的輸出作為后一命令的輸入。命令格式:命令1|命令2|命令3例:who | sort user_list 將who命令的結果排序,寫入文件user_list。(5) shell變量shell變量只有字符類型,其值為字符串,變量名以字母或下劃線開始,大小寫敏感,用$var的
9、形式引用名為var的變量的值。定義格式:變量名=變量值例:$ no=10$ hello=”hello everybody”$ echo $no$ echo $hello環(huán)境變量:shell定義的與工作環(huán)境有關的變量,可由用戶修改。home保存登錄主目錄的完全路徑名path保存命令搜索路徑,多個路徑間以”:”隔開pwd當前工作目錄的絕對路徑名ps1主提示符預定義變量:由shell定義,用戶不能修改。$? 前一命令執(zhí)行的返回狀態(tài)$當前進程的pid位置變量:shell程序命令行參數由shell寫到位置變量中,可在程序中引用$0當前進程的進程名$1第1個命令行參數$2第2個命令行參數$3第3個命令行參
10、數$#位置參數個數(6) 條件執(zhí)行語句格式:if 條件then 命令行else命令行fi條件格式: 測試語句 或 test 測試語句文件測試: -e filename 如果文件存在-r filename如果文件存在并可讀-x filename如果文件存在且可執(zhí)行-w filename如果文件存在且可寫-d filename如果文件存在且為目錄 -f filename如果文件存在且為普通文件數值測試:test n1 eq n2整數n1和n2相等test n1 ne n2 整數n1和n2不相等test n1 gt n2 整數n1大于n2test n1 ge n2整數n1大于或等于n2字符串測試:t
11、est s測試字符串非空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語句可根據字符串或變量的值從多個選項中選擇一項執(zhí)行格式:case string inexpr1)命令行1;expr2)命令行2;*)其它命令
12、行;esac例:從命令行輸入一個簡單的算術表達式,計算結果:#!/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測試:$./test 5 + 7(8) 循環(huán)for循環(huán)格式:for 變量名 in 數值列表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表示對表達式求值i= expr $i+1donebreak和continue:可于用終止循環(huán)和開始下一重循環(huán)(9) shell程序調試shell程序的調試主要通過利用shell解釋程序的-v和-x選項跟蹤程序的執(zhí)行過程來實現。調用格式:bash 選項 shell程序文件名選項含義:-v 當讀入shell輸入行時把它們顯示出來-x 執(zhí)行命令時把
14、命令和它們的參數顯示出來4. gnu c編譯器linux上可用的c編譯器是gnu c編譯器,它建立在自由軟件基金會編程許可證的基礎上,因此可以自由發(fā)布。linux 上的gnu c編譯器(gcc)是一個全功能的anci c兼容編譯器,而一般unix(如sco unix)用的編譯器是cc。下面介紹gcc和一些gcc編譯器最常用的選項。(1) 使用gcc通常后跟一些選項和文件名來使用gcc編譯器。gcc命令的基本用法如下: gcc options filenames命令行選項指定的編譯過程中的具體操作(2) gcc常用選項gcc有超過100個的編譯選項可用,這些選項中的許多可能永遠都不會用到,但一些
15、主要的選項將會頻繁使用。很多的gcc選項包括一個以上的字符,因此必須為每個選項指定各自的連字符,并且就像大多數linux 命令一樣不能在一個單獨的連字符后跟一組選項。例如,下面的命令是不同的:gcc -p-g test.cgcc -pg test.c第一條命令告訴gcc編譯test.c時為prof命令建立剖析(profile)信息并且把調試信息加入到可執(zhí)行文件里。第二條命令告訴gcc只為gprof命令建立剖析信息。當不用任何選項編譯一個程序時,gcc將建立(假定編譯成功)一個名為a.out的可執(zhí)行文件。例如, gcc test.c編譯成功后,當前目錄下就產生了一個a.out文件。也可用-o選項
16、來為即將產生的可執(zhí)行文件指定一個文件名來代替a.out。例如:gcc o count count.c此時得到的可執(zhí)行文件就不再是a.out,而是count。gcc也可以指定編譯器處理步驟多少。-c選項告訴gcc僅把源代碼編譯為目標代碼而跳過匯編和連接步驟。這個選項使用得非常頻繁因為它編譯多個c程序時速度更快且更易于管理。默認時gcc建立的目標代碼文件有一個.o的擴展名。(3) 執(zhí)行文件 格式: ./可執(zhí)行文件名例:./a.out ./count5. gdb調試工具linux包含了一個叫gdb的gnu調試程序。gdb是一個用來調試c和c+程序的強有力調試器。它使你能在程序運行時觀察程序的內部結構
17、和內存的使用情況。它具有以下一些功能:監(jiān)視程序中變量的值;設置斷點以使程序在指定的代碼行上停止執(zhí)行;一行行的執(zhí)行代碼。以下是利用gdb進行調試的步驟:(1) 調試編譯代碼為了使gdb正常工作,必須使你的程序在編譯時包含調試信息。調試信息里包含你程序里的每個變量的類型和在可執(zhí)行文件里的地址映射以及源代碼的行號。gdb利用這些信息使源代碼和機器碼相關聯。在編譯時用 g 選項打開調試選項。(2) gdb基本命令命 令描 述file裝入欲調試的可執(zhí)行文件kill終止正在調試的程序list列出產生執(zhí)行文件的源代碼部分next執(zhí)行一行源代碼但不進入函數內部step執(zhí)行一行源代碼并進入函數內部run執(zhí)行當前
18、被調試的程序quit終止gdbwatch監(jiān)視一個變量的值而不管它何時被改變break在代碼里設置斷點,使程序執(zhí)行到這里時被掛起make不退出gdb就可以重新產生可執(zhí)行文件shell不離開gdb就執(zhí)行unix shell 命令(3) 應用舉例1)設有一源程序greet.c2)編譯,gcc -ggdb o greet greet.c,出錯3)gdb greet ,出現提示符(gdb),此時可在提示符下輸入gdb的命令了,如:(gdb)run(gdb)list4)退出調試狀態(tài),返回系統(tǒng)提示符下, (gdb)quit6. linux環(huán)境下c/c+程序設計基礎在unix/linux環(huán)境下,開發(fā)應用程序的
19、流程如圖2.1所示。源代碼編輯器編譯器:編譯、匯編庫文件連接程序:連接源程序:.c .cpp目標程序:.o二進制可執(zhí)行程序頭文件.h裝載程序:加載運行內存映象調試工具:調試程序打包工具:發(fā)行程序圖2.1 linux應用程序開發(fā)流程一個應用程序的開發(fā)大概包括5個過程:(1) 編輯程序。使用源代碼編輯器產生源代碼,c/c+語言的源程序后綴為.c和.cpp。(2) 編譯程序。使用編譯程序將源程序編譯成目標代碼文件,目標代碼文件的后綴通常為.o。unix/linux環(huán)境常用的編譯工具是gcc。(3) 鏈接程序。使用連接程序將目標代碼文件與系統(tǒng)庫文件鏈接形成可執(zhí)行程序。連接程序通常與gcc集成在一起。(
20、4) 加載和運行程序。將生成的可執(zhí)行程序加載到內存運行。(5) 調試程序。使用ddd/gdb等調試工具對程序進行調試。ddd是gdb的圖形界面。(6) 打包發(fā)行程序。將完成了調試和測試的程序打包發(fā)行。下面使用一個示例說明在linux環(huán)境下開發(fā)一個應用程序的過程。假定現在有一個c語言文件hw.c,其內容如下:#include main()printf(hello worldn);exit(0);第一步:使用vi或kate等編輯工具編寫以上源程序,并取名為hw.c;第二步:使用gcc編譯鏈接源程序hw.c生成可執(zhí)行程序。命令格式:$ gcc -g -o 選項說明:-o 后面的參數指明生成的可執(zhí)行程
21、序名,如果沒有該選項,則可執(zhí)行程序名為a.out -g在生成的可執(zhí)行二進制程序中加入調試信息,以便進行源代碼級調試本例命令:$ gcc g o hw hw.c第三步:運行程序。命令格式為: $ ./hw第四步:如果程序需要調試,可以借助ddd/gdb進行源代碼級的調試。啟動調試命令是:$ ddd hw說明:ddd調試工具的用戶界面與vc+等開發(fā)環(huán)境很相似,可以在gui環(huán)境中設置斷點、單步執(zhí)行、檢查變量和寄存器的值等。三. 實驗內容1. 編輯、分析、理解和調試一個shell程序;2. 編輯、分析、理解和調試一個c/c+語言程序。四. 實驗步驟(一)shell程序的分析、運行與調試1. 使用kate、kedit和vi等編輯工具編輯shell程序renam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年北師大新版高二化學上冊階段測試試卷含答案
- 二零二五年智能互動高炮廣告牌制作與施工協(xié)議3篇
- 2025年度鋼結構工程施工合同履約擔保實施指南3篇
- 2025濟寧國資旗下賽瓦特生物質能項目合作協(xié)議2篇
- 2025年外研版三年級起點選修1歷史下冊階段測試試卷含答案
- 二零二五年度石材行業(yè)風險評估與管理合同3篇
- 2025年人教版九年級化學上冊月考試卷
- 二零二五年環(huán)境應急預案合作協(xié)議3篇
- 2025年人教五四新版七年級物理下冊階段測試試卷
- 2025年上教版九年級生物下冊月考試卷含答案
- 運用PDCA康復醫(yī)學科康復患者訓練落實率品管圈QCC匯報
- 部編人教版三年級語文下冊同步習題(全冊含答案)
- 2023年歷屆華杯賽初賽小高真題
- 焦作市中佰宜佳材料有限公司年產15萬噸煅后焦項目環(huán)評報告
- 2023年健康管理師(一級)《基礎知識》考試題庫資料(300多題)
- 硬件研發(fā)產品規(guī)格書mbox106gs
- GB/T 6913-2023鍋爐用水和冷卻水分析方法磷酸鹽的測定
- 項目部布置圖方案
- 珠海某啤酒廠拆除工程施工方案
- 專業(yè)技術報告鑒定意見專業(yè)技術報告鑒定意見八篇
- 人教PEP版三年級上冊英語 Unit 2 教案 課時一
評論
0/150
提交評論