李艷紅,侯睿(中南民族大學(xué)計算機科學(xué)學(xué)院,武漢 430074)
Linux網(wǎng)絡(luò)操作系統(tǒng)教學(xué)中行為導(dǎo)向教學(xué)模式的案例教學(xué)實踐
李艷紅,侯睿
(中南民族大學(xué)計算機科學(xué)學(xué)院,武漢 430074)
普通高校的Linux操作系統(tǒng)課程[1]主要是為了培養(yǎng)學(xué)生掌握Linux操作系統(tǒng)的使用技能,熟悉在Linux平臺上開展工作和進行應(yīng)用程序設(shè)計的方法,更好地幫助學(xué)生理解操作系統(tǒng)的原理[3]。
隨著Linux的使用和普及,IT業(yè)中Linux程序員地位的提高,Linux操作系統(tǒng)課程的重要性也逐漸體現(xiàn)出來。從非計算機學(xué)院的學(xué)生也紛紛選修Linux課這一點也看得出來。但是在學(xué)習(xí)過程中,不少學(xué)生的熱情逐漸被消磨殆盡了。這是由于Linux操作系統(tǒng)課程有其特殊性:知識點多,容易忘記,學(xué)習(xí)過程相對枯燥。另外,傳統(tǒng)教學(xué)方法通常是教師先講授嚴謹?shù)睦碚撝R和具體的操作步驟,然后讓學(xué)生上機實踐;或者是教師邊講述操作步驟,學(xué)生亦步亦趨地跟從進行。這樣,學(xué)生在整個過程中缺乏自主性,思維受到一種無形的禁錮,在完成上機實驗操作時通常只會依葫蘆畫瓢,而沒有主動地帶著問題去尋找解決辦法[2]。
為此我們總結(jié)出,通過精心設(shè)計的課件、案例和實驗,將主要的知識點串起來,力求引導(dǎo)學(xué)生帶著問題去學(xué)習(xí),講解過程以實踐和案例為主、理論知識為輔,可以很好地激發(fā)學(xué)生的求知欲望,記住一個案例就等于記住了一串知識,起到以點帶面的效果。這就是行為導(dǎo)向教學(xué)模式的一種應(yīng)用。
行為導(dǎo)向模式的理論[4]已經(jīng)有很多文章做了各個層面的介紹。本文側(cè)重于行為導(dǎo)向模式中的案例教學(xué)方法的實際應(yīng)用。本文介紹的課程案例實驗,將Linux系統(tǒng)課程的主要知識點shell的使用、Makefile的使用、文件描述符、重定向、#include的實質(zhì)意義,以及grep、awk等命令整合其中[5]。
該案例的需求如下:設(shè)計一個Linux gnu c++的控制臺程序,模擬風(fēng)扇的開關(guān)和調(diào)速,程序運行時,代表通電;從鍵盤輸入1、2、3、4分別代碼通電、提速、降速、關(guān)電操作,用speed0-speed3代表不同轉(zhuǎn)速;輸入4后,用磁盤文件保存當前轉(zhuǎn)速,下次運行程序是讀此文件得到初始轉(zhuǎn)速,第一次運行時沒有文件則使用默認值speed0。
程序包含4個文件:一個定義命令和狀態(tài)的枚舉類型的文件defs.h,一個主程序main.cpp,一個shell程序tool_defs,還有就是定義編譯規(guī)則的Makefile。以下逐一介紹案例包含的Linux知識點。
頭文件defs.h的內(nèi)容如下:
圖1 頭文件
3-9行的枚舉類型定義了命令字,以及它們的值和注釋;10-16行的枚舉類型定義了狀態(tài),及其值和注釋;17-22行定義了命令字的結(jié)構(gòu);23-28行定義了狀態(tài)的結(jié)構(gòu)。
學(xué)過C語言的學(xué)生都知道,在程序中enum的值相當于一個整形數(shù)。在程序運行期間,需要打印用戶的“命令”和風(fēng)扇的“狀態(tài)”等信息,如果采用在程序中用if語句或者switch...case語句根據(jù)enum值來打印信息的方法,則顯得不靈活,特別是打印信息的位置比較分散、enum值定義需要更名時,還容易出錯。
C語言的編譯器在處理#include預(yù)編譯時,會將其所引用的文件的內(nèi)容填入#include語句的位置。根據(jù)這個特性,本案例使用shell命令,從頭文件中取出enum定義的名稱、值、注釋,生成臨時文件。然后在程序中定義命令字和狀態(tài)的結(jié)構(gòu)實例處,用#include引用臨時文件:
①shell程序tool_defs中包含兩行命令,分別生成命令和狀態(tài)對應(yīng)的臨時文件:
②命令的臨時文件內(nèi)容如下 (狀態(tài)的臨時文件類似):
圖2 臨時文件
③程序main.cpp中引用臨時文件的語句:
圖3 引用臨時文件
這里面包含的知識點有:預(yù)編譯、#include的實質(zhì)意義、如何實例化一個不定長的結(jié)構(gòu)數(shù)組變量同時賦初值、簡單的shell編程、管道的使用方法、重定向的使用方法、cat命令的使用、grep命令的使用、awk命令的使用等。
這個Makefile文件只有兩個目標 (target):all以及clean。如圖4所示。
圖4 Makefile
在all中,先調(diào)用sh命令執(zhí)行shell程序tool_defs生成2.1中所述的臨時文件,然后調(diào)用g++命令編譯生成可執(zhí)行文件fan。在clean中,將中間文件刪除,其中的兩個.txt文件就是臨時文件,speed是程序執(zhí)行后退出時保存“風(fēng)扇轉(zhuǎn)速”的文件,tags是vim編輯器使用的標記文件。
在這里,可以使學(xué)生對Makefile有個感性認識,同時學(xué)習(xí)如何在Makefile中執(zhí)行一個shell程序,g++命令的初級用法,以及rm的使用。
本案例將上次“風(fēng)扇轉(zhuǎn)速”保存到叫做speed的文件,程序啟動時代表通電,然后讀取speed的內(nèi)容,并根據(jù)該內(nèi)容設(shè)定風(fēng)扇的狀態(tài)。speed的讀取,可以直接使用文件存取函數(shù)。但是為了示范C代碼與shell命令的互動,本案例使用popen函數(shù)來實現(xiàn)。popen的作用是運行一個shell命令,返回一個文件描述符,從該文件描述符,程序可以讀取shell的輸出。
如圖5所示,第124行popen函數(shù)執(zhí)行了一個“cat ./speed”命令,就是現(xiàn)實speed的內(nèi)容,fp是一個文件描述符,第125行用fgets函數(shù)從fp中讀取該內(nèi)容,第126行將內(nèi)容轉(zhuǎn)換為整形值,第127行用pclose將文件描述符關(guān)閉。
圖5 讀取“風(fēng)扇轉(zhuǎn)速”
在不關(guān)心執(zhí)行結(jié)果的時候,C程序也可以通過system函數(shù)調(diào)用shell命令。雖然這個方法不能獲得shell命令的執(zhí)行的輸出,但是語句更簡潔。本案中,想退出程序時,須向風(fēng)扇發(fā)出CMD_POWEROFF的命令,程序在退出前,會將狀態(tài)機的值保存到speed文件。如圖6所示,sprintf語句生成shell命令,state_machine(狀態(tài)機)是一個整形數(shù),取值為枚舉型eSM之一,這個shell命令將狀態(tài)機用echo命令打印出來,并重定向到文件speed。system語句執(zhí)行該shell命令,這樣就完成了狀態(tài)機的保存了。
圖6 將狀態(tài)機的值保存到文件
在本例中,給學(xué)生示范了stdout和stderr以及重定向的使用,如圖7是全部的輸出都打印到屏幕的情況,圖8是只有stdout打印到屏幕的情況。請注意,圖8在執(zhí)行fan程序時加了參數(shù)”2>/dev/null”表示錯誤信息重定向到null設(shè)備,不做任何處理,好比是電流對地短路。
圖7 stdout和stderr都打印到屏幕
圖8 只有stdout打印到屏幕
行為導(dǎo)向教學(xué)模式還有模擬教學(xué)、案例分析、角色扮演、項目教學(xué)等方法。項目教學(xué)法,是案例教學(xué)法的擴展,只是項目比案例涵蓋面要大要系統(tǒng)一些。國外很多著名大學(xué)的一些課程,將整個教學(xué)過程用project來命名,例如project 0代表理論只是的鋪墊,從project 1開始就是一個個的項目,教師和助教則帶領(lǐng)學(xué)生獨立完成這些項目,理論知識則大多數(shù)是學(xué)生自學(xué)。由于篇幅所限,本文只介紹了案例分析教學(xué)方法。
因為Linux包含的理論知識很多,發(fā)展也很快,教科書也只出列出了一些重要的有代表性的知識,如果只是一味面面俱到地給學(xué)生灌輸這些知識,多數(shù)學(xué)生將會聽得一知半解,然后變成索然無味,最終極度厭惡,這是吃力不討好。經(jīng)實踐證明,案例教學(xué)法,可以很好地將學(xué)生帶入到解決實際問題的環(huán)境中,使學(xué)生帶著目的去學(xué)習(xí),激發(fā)學(xué)生的主觀能動性,印象更深刻容易牢記。如果有選擇性地將這些知識點做成一個個案例,整個課程結(jié)束后,學(xué)生明白解決什么問題需要熟練掌握哪些知識點,哪些知識點可以不用死記硬背,需要用的時候如何正確查找,對理論的研究需要深入到那個層次學(xué)生也可以把握好這個度,更好更科學(xué)地協(xié)調(diào)Linux與其他課程在時間上的投入。
[1]劉艷青,蘭淑霞.《Linux操作系統(tǒng)》課程教學(xué)研究[J].現(xiàn)代計算機,2010(3):74-77.
[2]楊海鵬,魏巍.Linux操作系統(tǒng)的教學(xué)與研究[期刊論文]吉林工程技術(shù)師范學(xué)院學(xué)報,2007(23).
[3]羅宇,張穎蓓,葉常春.本科操作系統(tǒng)課程設(shè)置及教學(xué)體會[J].計算機教育,2006(2):39-40.
[4]都桂英.行為導(dǎo)向法在計算機教學(xué)中的應(yīng)用[J].青海大學(xué)學(xué)報(自然科學(xué)版),2008,26(2):96-97.
[5]楊鑄.Linux下C語言應(yīng)用編程.北京航天航空大學(xué)出版社,2012:121-136.
Linux;Network Operating System;Course Experiment;Knowledge Point
Case-Teaching Practice of Action-Oriented Method in Linux OS Course
LI Yan-hong,HOU Rui
(College of Computer Science,South-Central University for Nationalities,Wuhan 430074)
國家自然科學(xué)基金資助項目(No.61309002)、湖北省普通高等院校戰(zhàn)略性新興(支柱)產(chǎn)業(yè)人才培養(yǎng)計劃(No.CY12001)、湖北省教學(xué)研究項目(No.2013191)、中南民族大學(xué)網(wǎng)絡(luò)技術(shù)類課程教學(xué)團隊(No.JTX11003)、中南民族大學(xué)精品課程(No.JPX10011)
1007-1423(2015)30-0006-04
10.3969/j.issn.1007-1423.2015.30.002
2015-09-15
2015-09-30
Linux網(wǎng)絡(luò)操作系統(tǒng)課程知識點多,難以記憶,學(xué)習(xí)過程相對枯燥。傳統(tǒng)教學(xué)方式,較難調(diào)動學(xué)生的學(xué)習(xí)主動性。結(jié)合多年教學(xué)經(jīng)驗,通過精心設(shè)計的課件、案例和實驗,將主要的知識點串起來,力求引導(dǎo)學(xué)生帶著問題去學(xué)習(xí),可以很好地激發(fā)學(xué)生的求知欲望。在實際教學(xué)過程中,以實踐和案例為主、理論知識為輔,取得良好的教學(xué)效果。
Linux;網(wǎng)絡(luò)操作系統(tǒng);課程實驗;知識點
李艷紅(1973-),博士,副教授,研究方向為移動時空數(shù)據(jù)庫
Linux OS course involves numerous knowledge points,hard to memorize,relatively boring.It's hard to arouse the initiative of students with traditional teaching methods.Combined with teaching experience of many years,we concluded that,through elaborately designed courseware,cases and experiments,the main knowledge points can be connected.In this way,we can lead students to bring the issue to study,and greatly arouse students'thirst for knowledge.In the practice teaching,by given priority to case teaching and supplemented by theory teaching,satisfactory teaching results have been achieved.