李艳红,侯睿(中南民族大学计算机科学学院,武汉 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.