李艷紅,侯睿(中南民族大學計算機科學學院,武漢 430074)
Linux網絡操作系統教學中行為導向教學模式的案例教學實踐
李艷紅,侯睿
(中南民族大學計算機科學學院,武漢 430074)
普通高校的Linux操作系統課程[1]主要是為了培養學生掌握Linux操作系統的使用技能,熟悉在Linux平臺上開展工作和進行應用程序設計的方法,更好地幫助學生理解操作系統的原理[3]。
隨著Linux的使用和普及,IT業中Linux程序員地位的提高,Linux操作系統課程的重要性也逐漸體現出來。從非計算機學院的學生也紛紛選修Linux課這一點也看得出來。但是在學習過程中,不少學生的熱情逐漸被消磨殆盡了。這是由于Linux操作系統課程有其特殊性:知識點多,容易忘記,學習過程相對枯燥。另外,傳統教學方法通常是教師先講授嚴謹的理論知識和具體的操作步驟,然后讓學生上機實踐;或者是教師邊講述操作步驟,學生亦步亦趨地跟從進行。這樣,學生在整個過程中缺乏自主性,思維受到一種無形的禁錮,在完成上機實驗操作時通常只會依葫蘆畫瓢,而沒有主動地帶著問題去尋找解決辦法[2]。
為此我們總結出,通過精心設計的課件、案例和實驗,將主要的知識點串起來,力求引導學生帶著問題去學習,講解過程以實踐和案例為主、理論知識為輔,可以很好地激發學生的求知欲望,記住一個案例就等于記住了一串知識,起到以點帶面的效果。這就是行為導向教學模式的一種應用。
行為導向模式的理論[4]已經有很多文章做了各個層面的介紹。本文側重于行為導向模式中的案例教學方法的實際應用。本文介紹的課程案例實驗,將Linux系統課程的主要知識點shell的使用、Makefile的使用、文件描述符、重定向、#include的實質意義,以及grep、awk等命令整合其中[5]。
該案例的需求如下:設計一個Linux gnu c++的控制臺程序,模擬風扇的開關和調速,程序運行時,代表通電;從鍵盤輸入1、2、3、4分別代碼通電、提速、降速、關電操作,用speed0-speed3代表不同轉速;輸入4后,用磁盤文件保存當前轉速,下次運行程序是讀此文件得到初始轉速,第一次運行時沒有文件則使用默認值speed0。
程序包含4個文件:一個定義命令和狀態的枚舉類型的文件defs.h,一個主程序main.cpp,一個shell程序tool_defs,還有就是定義編譯規則的Makefile。以下逐一介紹案例包含的Linux知識點。

頭文件defs.h的內容如下:

圖1 頭文件
3-9行的枚舉類型定義了命令字,以及它們的值和注釋;10-16行的枚舉類型定義了狀態,及其值和注釋;17-22行定義了命令字的結構;23-28行定義了狀態的結構。
學過C語言的學生都知道,在程序中enum的值相當于一個整形數。在程序運行期間,需要打印用戶的“命令”和風扇的“狀態”等信息,如果采用在程序中用if語句或者switch...case語句根據enum值來打印信息的方法,則顯得不靈活,特別是打印信息的位置比較分散、enum值定義需要更名時,還容易出錯。
C語言的編譯器在處理#include預編譯時,會將其所引用的文件的內容填入#include語句的位置。根據這個特性,本案例使用shell命令,從頭文件中取出enum定義的名稱、值、注釋,生成臨時文件。然后在程序中定義命令字和狀態的結構實例處,用#include引用臨時文件:
①shell程序tool_defs中包含兩行命令,分別生成命令和狀態對應的臨時文件:

②命令的臨時文件內容如下 (狀態的臨時文件類似):

圖2 臨時文件
③程序main.cpp中引用臨時文件的語句:

圖3 引用臨時文件
這里面包含的知識點有:預編譯、#include的實質意義、如何實例化一個不定長的結構數組變量同時賦初值、簡單的shell編程、管道的使用方法、重定向的使用方法、cat命令的使用、grep命令的使用、awk命令的使用等。

這個Makefile文件只有兩個目標 (target):all以及clean。如圖4所示。

圖4 Makefile
在all中,先調用sh命令執行shell程序tool_defs生成2.1中所述的臨時文件,然后調用g++命令編譯生成可執行文件fan。在clean中,將中間文件刪除,其中的兩個.txt文件就是臨時文件,speed是程序執行后退出時保存“風扇轉速”的文件,tags是vim編輯器使用的標記文件。
在這里,可以使學生對Makefile有個感性認識,同時學習如何在Makefile中執行一個shell程序,g++命令的初級用法,以及rm的使用。

本案例將上次“風扇轉速”保存到叫做speed的文件,程序啟動時代表通電,然后讀取speed的內容,并根據該內容設定風扇的狀態。speed的讀取,可以直接使用文件存取函數。但是為了示范C代碼與shell命令的互動,本案例使用popen函數來實現。popen的作用是運行一個shell命令,返回一個文件描述符,從該文件描述符,程序可以讀取shell的輸出。
如圖5所示,第124行popen函數執行了一個“cat ./speed”命令,就是現實speed的內容,fp是一個文件描述符,第125行用fgets函數從fp中讀取該內容,第126行將內容轉換為整形值,第127行用pclose將文件描述符關閉。

圖5 讀取“風扇轉速”

在不關心執行結果的時候,C程序也可以通過system函數調用shell命令。雖然這個方法不能獲得shell命令的執行的輸出,但是語句更簡潔。本案中,想退出程序時,須向風扇發出CMD_POWEROFF的命令,程序在退出前,會將狀態機的值保存到speed文件。如圖6所示,sprintf語句生成shell命令,state_machine(狀態機)是一個整形數,取值為枚舉型eSM之一,這個shell命令將狀態機用echo命令打印出來,并重定向到文件speed。system語句執行該shell命令,這樣就完成了狀態機的保存了。

圖6 將狀態機的值保存到文件

在本例中,給學生示范了stdout和stderr以及重定向的使用,如圖7是全部的輸出都打印到屏幕的情況,圖8是只有stdout打印到屏幕的情況。請注意,圖8在執行fan程序時加了參數”2>/dev/null”表示錯誤信息重定向到null設備,不做任何處理,好比是電流對地短路。

圖7 stdout和stderr都打印到屏幕

圖8 只有stdout打印到屏幕
行為導向教學模式還有模擬教學、案例分析、角色扮演、項目教學等方法。項目教學法,是案例教學法的擴展,只是項目比案例涵蓋面要大要系統一些。國外很多著名大學的一些課程,將整個教學過程用project來命名,例如project 0代表理論只是的鋪墊,從project 1開始就是一個個的項目,教師和助教則帶領學生獨立完成這些項目,理論知識則大多數是學生自學。由于篇幅所限,本文只介紹了案例分析教學方法。
因為Linux包含的理論知識很多,發展也很快,教科書也只出列出了一些重要的有代表性的知識,如果只是一味面面俱到地給學生灌輸這些知識,多數學生將會聽得一知半解,然后變成索然無味,最終極度厭惡,這是吃力不討好。經實踐證明,案例教學法,可以很好地將學生帶入到解決實際問題的環境中,使學生帶著目的去學習,激發學生的主觀能動性,印象更深刻容易牢記。如果有選擇性地將這些知識點做成一個個案例,整個課程結束后,學生明白解決什么問題需要熟練掌握哪些知識點,哪些知識點可以不用死記硬背,需要用的時候如何正確查找,對理論的研究需要深入到那個層次學生也可以把握好這個度,更好更科學地協調Linux與其他課程在時間上的投入。
[1]劉艷青,蘭淑霞.《Linux操作系統》課程教學研究[J].現代計算機,2010(3):74-77.
[2]楊海鵬,魏巍.Linux操作系統的教學與研究[期刊論文]吉林工程技術師范學院學報,2007(23).
[3]羅宇,張穎蓓,葉常春.本科操作系統課程設置及教學體會[J].計算機教育,2006(2):39-40.
[4]都桂英.行為導向法在計算機教學中的應用[J].青海大學學報(自然科學版),2008,26(2):96-97.
[5]楊鑄.Linux下C語言應用編程.北京航天航空大學出版社,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)
國家自然科學基金資助項目(No.61309002)、湖北省普通高等院校戰略性新興(支柱)產業人才培養計劃(No.CY12001)、湖北省教學研究項目(No.2013191)、中南民族大學網絡技術類課程教學團隊(No.JTX11003)、中南民族大學精品課程(No.JPX10011)
1007-1423(2015)30-0006-04
10.3969/j.issn.1007-1423.2015.30.002
2015-09-15
2015-09-30
Linux網絡操作系統課程知識點多,難以記憶,學習過程相對枯燥。傳統教學方式,較難調動學生的學習主動性。結合多年教學經驗,通過精心設計的課件、案例和實驗,將主要的知識點串起來,力求引導學生帶著問題去學習,可以很好地激發學生的求知欲望。在實際教學過程中,以實踐和案例為主、理論知識為輔,取得良好的教學效果。
Linux;網絡操作系統;課程實驗;知識點
李艷紅(1973-),博士,副教授,研究方向為移動時空數據庫
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.