第8章 编程基础
学习编程,主要应该学习三方面的知识,即程序开发环境的使用、编程语言的语法规则以及可供直接使用的标准类库/函数库。限于篇幅,本章着重讨论程序开发环境的使用。
本章附有例程,保存在目录turial-basic-redflag41-8-example中。
Basic集成开发工具Gambas
在红旗Linux4.1的开发工具盘中,提供了Gambas.0.99。
“Gambas几乎就是Basic!”,是基于Advanced Basic语言的集成开发环境。该工具可视化程度高、面向对象,并且简单易学,适合编程初学者做编程练习使用。
下面将结合一个小游戏的开发来讨论Gambas的基本使用方法。
需求分析--“聪明宝贝”的功能要求
要开发的小游戏被命名“聪明宝贝”。这是一个数字0到9的加法游戏。每局游戏开始后,程序会自动产生1道题,给出两个0到9范围内的随机数,要求游戏者算出这两个数的和。
初步分析,为了实现上述功能,大体上应该做如下事情:
1、建立一个应用程序窗体,游戏就在这个窗体上进行;
2、寻找一种产生随机数的办法、显示题目;
3、接收游戏者输入的答案,判断正确性。
对于“聪明宝贝”这样的小程序,上述需求分析已经足够,可以开始进行设计了。
设计
需求分析明确了应该做什么,设计则要解决如何做的问题。
象“聪明宝贝”这样的“微型”软件,其设计工作完全可以和编程工作混合在一起做。不过,为了便于说明,这里还是专门考虑一下设计的问题。
开发工具的选择
显而易见,“聪明宝贝”是一个图形化的应用程序,应该选择支持可视化编程的开发工具。这里就选择Gambas.0.99。
用户界面
Gambas提供的一些常用控件就可以满足“聪明宝贝”用户界面的设计需要。可以用窗体控件Form建立应用程序窗体;用标签控件Label显示题目;游戏者用鼠标点击命令按钮Button即可输入答案。
总地来看,程序涉及的控件有Form、Label、Button。各控件的布局和数量可以在编程时确定。
后台运算
Gambas提供了随机数生成函数Rnd,调用它就可以产生随机性的算术题目。
两个0~9的数字之和有可能是一位数字,也可能是两位数字。程序在产生一道题后,应该自动计算答案。当答案是一位数时,游戏者输入一位数字后就可以判断其回答的正确性;当答案是两位数时,就要等游戏者输入两个数字之后再进行判断。
编程第一回
有了基本的设计之后,就可以着手编写程序了。编程可以由粗到细,由简到繁地进行。先绘出用户界面轮廓,实现简单地操作,然后再逐步细化,最后达到设计目标。
启动Gambas新建工程
从开始菜单就可以启动Gambas:
【开始】→【应用程序】→【软件开发】→【Gambas】
开发工具启动后,首先会出现一个对话框,询问是要新建工程还是打开已有的工程。点击新建工程就会启动工程创建向导。
按照工程创建向导程序的提示,可以完成有关工程的一些基本信息的设置。这主要包括:
工程类型: 用gambas可以编写图形化界面的程序,也可以开发命令行界面的程序。还可以用已有的工程做模板创建新的工程。这里应该选“创建一个图型工程”。
工程名: 就是给工程订立一个名字。可以用smartbaby。
工程标题: 就用汉字标题“聪明宝贝”吧。
保存位置: 指定工程文件保存到哪里?
工程创建向导收集上述信息后就会自动生成一个smartbaby目录,在其中保存所有相关的文件。
新建窗体
完成工程创建工作后,gambas也就启动起来了。在屏幕左侧那个有菜单的窗口是gambas的主窗口。
在主窗口中用树形图表示了本工程所涉及的类、窗口、模块、和数据,工程名smartbaby就是树根。
用鼠标右键点击工程名smartbaby或者其下面的分支,都会出现弹出菜单,其中【新建】→【窗体】就是用来给工程添加窗体的。执行此功能,建立第一个窗体。开发工具会询问窗体的名字。这个窗体是游戏的主窗体,不妨定名为frmMain。注意,一定把“启动类”的复选框勾选上,因为程序启动时这个窗口就应该直接显示出来。
运行工程
现在工程已经有了可见的窗体了,不妨试着运行一下。方法很简单,用鼠标单击gambas主窗口工具栏中的绿色三角图标即可。程序运行起来后,应该显示一个窗口,虽然上面什么也没有。但可以执行窗口的基本操作,即:最小化和关闭。可以点击窗口右上角的最小化图标和关闭图标试试。
关闭窗口,意味着程序运行的终止。程序是在gambas的环境中运行的,也可以用鼠标单击gambas主窗口工具栏中的红色方块图标 来终止程序的运行。
保存和关闭工程
执行gambas主窗口菜单【文件】→【保存工程】可以把新建的工程保存起来。
执行gambas主窗口菜单【文件】→【退出】则可以将整个工程关闭并退出gambas。
上面做的工作虽然简单,但却解决了用gambas编程的最基本问题:
* 如何建立一个新工程;
* 如何添加窗体;
* 如何在调试环境下运行程序;
* 如何保存和关闭。
编程第二回
前面已经创建了新工程并且创建了窗体。接下来解决随机数生成和题目显示的问题。
打开已有工程
再次启动Gambas,会出现一个对话框,询问是要新建工程还是打开已有的工程。在对话框的右侧有一个列表,列出了最近的工程。可以从这个列表直接选择smartbaby。也可以点击“打开工程”按钮,然后在弹出的选择工程对话框中找到smartbaby。
添加控件
双击主窗口树形图中的frmMain,主窗口就显示出来了。
现在,要把一个标签控件和一个命令按钮控件加到窗体中。
在屏幕右侧,有一个工具箱窗口。需要的控件就在这个窗口里。如果工具箱窗口没有显示出来,执行Gambas主窗口菜单【视图】→【工具箱】就可以。
标签控件,即Label,可以用来显示不可修改的文本。在“聪明宝贝”中,用它来显示算术题目。先用鼠标单击工具箱中的标签图标 ,这个图标就会被黑线方框圈起来,变成 的样子。这表明选中了这个图标。然后用鼠标在主窗口任意位置进行拖放,主窗口上就会出现一个标签控件。
单击控件即可选中它。可以拖放选中的控件来调整其摆放位置。用鼠标指向被选中控件的边缘然后拖放,则可以调整控件大小。
用鼠标右键点击控件,执行弹出菜单中的“属性”则可以显示出该控件的属性窗口。默认的控件名称(Name)属性为Label1,改成lblDisplay。
命令按钮控件,即Button,点击它可以执行命令。命令按钮控件对于的图标是同理可以调整该按钮的位置和大小并修改其属性。控件名称(Name)改成btnNew,文本(text)设成“新
局”。将来程序做好时,点击这个按钮将开始新的一局游戏。
编写代码
窗体上已经有了一个按钮btnNew,和一个标签lblDisplay。可以编写代码实现这样的功能:单击按钮,调用随机数函数,产生两个随机数,作为算术题目的加数和被加数,然后组合形成字符串,通过标签显示出来。这样就解决随机数生成和题目显示的问题。
显然,这些代码应该在单击按钮时执行。“单击按钮”就是所谓的事件,而添加的代码,就是事件处理程序。
如何编写btnNew“单击事件”处理程序代码呢?用鼠标双击btnNew,就会弹出代码编辑器。在其中已经有了一些简单的代码:´ Gambas class file
PUBLIC SUB btnNew_Click()
END
这几行代码是Gambas 自动生成的。应该把btnNew“单击事件”处理程序代码写到PUBLIC SUB
btnNew_Click ()与随后的END之间。PUBLIC SUB btnNew_Click()表示一个函数的开始,END则表示一个函数的结束。这就是说,按钮btnNew发生“单击事件”时,程序将执行 btnNew_Click()这个函数。目前这个函数是空的,也就意味着按钮btnNew发生“单击事件”时,什么也不做。要实现前面提到的功能,就要编写程序,告诉计算机应该做什么。下面是定义好的程序代码:
PUBLIC SUB btnNew_Click()
DIM a AS Integer
DIM b AS Integer
a=Int(Rnd(10))
b=Int(Rnd(10))
lblDisplay.Text =Str$(a) &"+" &Str$(b)&"="
END
这个事件处理程序中,前两行以DIM开头定义了两个整型变量,即a和b,分别用来存加数和被加数。
接下来的两行是对a、b赋值。Rnd(10)函数将返回0到10范围内的随机数, Int()函数则是取整函数,取随机数的整数部分。最后一行把a、b转换成字符串,并与加号(+)和等号(=)连接起来,形成算术表达式的字符串,此字符串被传递给lblDisplay的Text属性,从而把题目显示出来。
BeefyMiracle 于 2012-12-21 12:23:53发表:
{:2_99:}
于 2012-04-05 10:57:56发表:
2265.com 安卓游戏
jpl2000 于 2005-12-18 09:44:44发表:
顶上去
uu 于 2005-08-09 10:36:37发表:
不错
何哥 于 2005-07-23 13:24:44发表:
支持
风雨无阻 于 2005-06-07 00:26:46发表:
顶
何哥 于 2005-05-29 00:40:18发表:
好东西是要顶顶顶上去的
非你不要 于 2005-05-02 21:14:03发表:
例7:升级PDF阅读器
系统的PDF阅读器是Xpdf3.0,它支持PDF1.5,版本比较低,无法正确读取高版本格式的PDF文件。
使用时也存在一些问题,即:在PDF文件名为中文时,直接用鼠标双击该文件无法成功启动PDF阅读器并自动读取该文件。为了解决上述问题,可以安装Acrobat Reader的Linux版。
安装Acrobat Reader For Linux
下载得到的Acrobat Reader For Linux安装包名字为linux-509.tar.gz,它虽然以.tar.gz结尾,但不是包含源代码的那种tar包,而是一个带安装向导的软件包。
要解开包,只需执行下面的命令。解压后会形成一个名为installers 的文件夹。
tar -xvzf linux-509.tar.gz
文件夹installers中有安装向导程序,但必须在命令行方式下运行。先用cd命令转移进入installers目录,然后执行如下命令就可以启动安装程序了。按程序提示,即可完成安装。
./install
安装提示都是英文的,开头是一系列的协议信息,连续按回车可以向下滚动。看完协议,输入accept
表示接受协议。然后一路回车就可以完成安装。安装完成后,可以用如下指令启动:
/usr/local/Acrobat5/bin/acroread
有了Acrobat Reader For Linux,Xpdf就用不上了。下面讨论一下删除Xpdf的问题,学习软件包管理器的使用。
用软件包管理器卸载xpdf
先启动软件包管理器,方法是:
【开始】→【设置】→【控制面板】→【软件包管理器】
软件包管理器有三个标签,分别是用户软件包、系统软件包和其他工具。利用“其他工具”标签中的
查找RPM包功能,可以找到Xpdf软件包的位置。如图11-6,xpdf属于Multimedia分组。注意,查找时输入的关键字是大小写敏感的。
接下来可以从“系统软件包”标签中找到Multimedia分组,单击它,再进一步找到xpdf,如图11-
7,列出了已经安装的一些应用软件包。点击xpdf消掉其前面的对勾,然后单击“安装/卸载系统”按钮,就可以进行卸载xpdf的操作了。系统开始卸载前,还会出现如图11-8的确认窗口。如果确信无误,单击“开始删除”按钮即可开始卸载,否则,可以单击“取消”。
调整开始菜单
Xpdf被卸载后,开始菜单中相应的菜单项【PDF阅读器】并不会自动被删除,应该借助于“菜单编辑
器”手动删除它。具体操作方法是:右键点击“开始”,启动“菜单编辑器”,依次展开“应用程
序”-》“图像”,找到“PDF阅读器”选中多媒体,点鼠标右键,在弹出菜单中执行“删除”即可。
为了方便,还应该在开始菜单中添加Acrobat Reader For Linux的启动项。同样需要使用“菜单编辑器”。
具体操作方法是:右键点击“开始”,启动“菜单编辑器”,依次展开“应用程序”-》“图像”,选中
图像,点鼠标右键,在弹出菜单中执行“新建菜单项”,名称定为“Acrobat Reader”(可以随便起这个名字),然后选中“录制和编辑音频”,在“注释”中写Acrobat Reader For Linux 5.0.9,在“命令”中添加启动命令,或者通过浏览找到这条命令。“系统图标”中就有Acrobat Reader的图标直接用它就可以。
最后单击“菜单编辑器”的【文件】→【保存】,把这些设置保存起来。这样,就可以通过开始菜单
启动“Acrobat Reader”了。
使用Acrobat Reader
虽然在开始菜单中设定“Acrobat Reader”的启动项,但实际应用时建议不要通过菜单启动。因为Acrobat
Reader For Linux是英文版的,其“打开”菜单不支持中文文件名。要读取。pdf文件(文件名可以是中文,所在的文件夹也是中文),可以先找到它,然后用鼠标右键点击它,执行“选择打开方式”,从打开方式的选择窗口中找到Acrobat Reader,就可以正常读取该PDF文件了。
每次都选择打开方式是比较麻烦的,可以在选定打开方式后,把“记住该类型文件的应用程序关
联”勾选上,这样操作一次后,再打开pdf文件时只需双击该文件即可。
例8 更换FTP客户端工具
系统自带的FTP客户端工具是KBear。但有些人习惯用gFTP。此时可以考虑更换FTP客户端工具。
可以从红旗Linux4.1的工具盘中找到gFTP的安装包。关于工具盘的使用方法参见例6。可以
在“network”下找到gFTP。安装它。安装程序会自动把该程序的启动项添加到开始菜单中。
接下来是卸载KBear,方法可以参照例7。KBear也在Multimedia分组中。
非你不要 于 2005-05-02 21:13:32发表:
磁盘空间查看
、、等键。是用来激活开始菜单的, 和是编辑操作时的常用键,用它们做取词修饰键键会干扰正常操作。综合对比,只有使用< Alt>产生的干扰会最少,因此推荐使用键作为取词修饰键。
在安装软件前,特别是安装大型软件前,一般需要考虑把软件安装在何处。这时就需要了解磁盘各分区有多少空闲空间,可以使用系统控制面板中提供的磁盘空间查看工具KDiskFree来了解这些信息。
【开始】→【设置】→【控制面板】→【磁盘空间查看】
如下图所示,从主窗口的列表中就可以了解到各分区空间的使用情况了。注意,在Linux下,各分区是以挂装点标识的。
软件包安装和使用举例
例1:安装RAR for Linux
要想在红旗Linux4.1桌面版操作rar格式的压缩文件,必须安装RAR for Linux。RAR for Linux的软件
包是tar包,但其中并没有源代码。以RAR 3.41 for Linux为例,其安装包的文件名是rarlinux-3.4.1.tar.gz。
安装此软件的第一步是解压缩,用cd命令转移到rarlinux-3.4.1.tar.gz所在的目录,然后执行下面的命令就可以完成解压。解压后,会形成一个目录 rar。
tar -xvzf rarlinux-3.4.1.tar.gz
由于此tar包不包含源代码(也就是说,这是一个编译好的软件安装包),因此不必编译,直接执行安装
命令就可以。用cd命令转移到解压生成的那个 rar 目录执行安装命令。
make install
这样就算安装完了。
从安装时的提示信息可以看出,安装程序只是把RAR运行所需的文件复制到特定的目录。如果要卸载,把这些文件删除即可。
例2:音频录制和编辑工具Sweep
红旗Linux4.1桌面版中没有用于音频录制和编辑的工具软件。如果有这方面的需求,可以安装
Sweep。下载得到Sweep软件的安装包是 sweep-0.8.3.tar.gz,这是一个标准的含有源码的tar包。其中,0.8.3 是版本号。按典型的tar源码包的安装方法即可。具体步骤如下:
1、解压缩。用cd命令转移到 sweep-0.8.3.tar.gz 所在的目录然后执行:
tar -xvzf sweep-0.8.3.tar.gz
解压后,会形成一个目录 sweep-0.8.3
2、编译和安装
转移到解压生成的那个sweep-0.8.3目录
依次执行如下命令:
./configure
make
make install
make clean
这样就算安装完了。
安装完成后,可以从命令行启动sweep,命令如下。
/usr/local/bin/sweep
接下来还应该在开始菜单中建立sweep的菜单项,这样用起来才方便。具体操作方法是:右键点
击“开始”,启动“菜单编辑器”,依次展开“应用程序”-》“多媒体”,选中多媒体,点鼠标右键,
在弹出菜单中执行“新建菜单项”,名称定为“录制和编辑音频”(可以随便起这个名字),然后选中“录
制和编辑音频”,在“注释”中写sweep 0.8.3,在“命令”中添加启动命令,或者通过浏览找到这条命令。
可以从解压生成的那个sweep-0.8.3目录中找到该程序自带的图标文件sweep.pnp,用它做图标就可以。
最后单击“菜单编辑器”的【文件】→【保存】,把这些设置保存起来。这样,就可以通过开始菜单
启动“sweep”了。
【开始】→【应用程序】→【多媒体】→【录制和编辑音频】
具体使用方法参见“影音媒体和图像”一章
例3:RedOffice办公套件
在 Linux 下,可以用RedOffice办公套件处理文档、表格、演示稿等文件。这个软件也能处理Windows下MS Office所生成的生成的文档、表格、演示稿等文件。
这里介绍RedOffice For Linux V2.0个人版的安装方法。
RedOffice 个人版相对RedOffice标准版进行了一些功能裁减,这些功能是:宏、数据源、文献数据库、新建标签/名片/HTML等文档类型的功能、自动文件助理、插入动态框、插入区域、图像地图、插入Applet对象/Plug-in对象、与Java/XML相关的功能。
RedOffice个人版无需安装密码,没有时间限制,可以由个人用户免费、自由地下载、安装和试用。下载得到的RedOffice安装包名字为 RedOffice2.0_ForLinux.tar.gz,它虽然以.tar.gz结尾,但不是包含源代码的那种tar包,而是一个带安装向导的软件包。
要解开包,只需执行下面的命令。解压后会形成一个名为 RedOffice2.0_ForLinux的文件夹。
tar -xvzf RedOffice2.0_ForLinux.tar.gz
接下来在图形界面中进入RedOffice2.0_ForLinux文件夹,双击setup就开始安装了。按提示即可完成全部安装过程。默认的安装路径是在 /root/RedOffice2.0-PE之下。按Linux管理程序的习惯,应将其修改为/usr/local/RedOffice2.0-PE。
安装完成后,要适当修改RedOffice的某些目录的权限,以防止其他用户使用该软件时出现安全备份
错误。相应的命令有:
chmod 777 /usr/local/RedOffice2.0-PE/user/backup
chmod 777 /usr/local/RedOffice2.0-PE/user/basic
安装程序已自动把RedOffice各组件启动的快捷方式放到开始菜单里了。
例4:C++集成开发环境Kdevelop
在红旗Linux4.1的开发工具盘中,提供了集成开发环境Kdevelop3.0.92。可以下载相应的ISO文件并
利用其中的安装程序,安装之。
安装的第一步,是要挂载红旗Linux4.1的开发工具盘的ISO文件RedFlag4-devel-20040121158.iso,以便读取其中的内容。挂载前需要选择挂载点。假设在/mnt下创建一个iso目录,专门用于挂载ISO文件。
未挂载前,查看此目录,是空的。
mkdir /mnt/iso
确定了挂载点之后,就可以执行mount命令进行挂载了。先用cd命令转移到RedFlag4-devel-
1
20040121158.iso所在的目录,然后执行如下命令:
mout -t iso9660 -o loop,iocharset=cp936 RedFlag-4-devel-20040121158.iso /mnt/iso
再查看/mnt/iso,我们发现其中已经有文件了。
用鼠标双击autorun就可以启动开发工具盘中的安装向导程序。在选择软件包的窗口列表中,选中
kdeools分组,点击“下一步”按钮就可以自动把Kdevelop安装到系统中。
安装完成后,从开始菜单中就可以启动Kdevelop:
【开始】→【应用程序】→【软件开发】→【Kdevelop】
如果不再需要读取开发工具盘的ISO文件,应该及时卸载它,命令如下。卸载后查看/mnt/iso,会发现它又空了。
umount /mnt/iso
提示:在红旗Linux4.1的开发工具盘中,提供了Basic语言的可视化集成开发环境Gambas0.99。安装方法同上,此时,在选择软件包的窗口列表中,应该选中Basic分组。
例5:英汉词典和汉英词典
红旗Linux4.1的工具盘提供了词典软件“星际译王”,这是一个用Gtk2开发的、集英汉词典和汉英词
典于一身的跨平台的国际化的词典软件。可以用这个软件查找英文单词的汉语解释,也可以查汉语词汇对应的英文单词。该软件提供了“通配符匹配”、“选中区取词”、“模糊查询”等功能支持灵活的查字典操作。
安装和启动
“星际译王”安装包的名称为stardict(参见图stardict-1),具体安装方法请参考“软件的安装和卸
载”一章。
安装程序会自动把该软件的启动项添加到开始菜单:
【开始】→【应用程序】→【附件】→【星际译王】
单击该菜单,即可以启动“星际译王”。
帮助信息
“星际译王”带有简介明了的使用方法指导。一部分在启动界面列出,主要是一些基本的操作方法,
比如如何关闭程序,如何隐藏窗口等。在把输入框内的内容清空后,也会出现这些信息。还有一部分需要单击窗口下方的“显示信息”图标 才能看到。
英汉查询
如果要查某个英文单词的汉语解释,只需在输入框中输入该英文单词即可。图stardict-2
给出了一个查英文“red”这个单词的例子。
汉英查询
如果要查某个汉语词汇对应的英文,只需在输入框中输入该汉语词汇即可。图stardict-3给出了一个
查“红旗”对应的英文的例子。
提示:在输入被查询词汇时,采用复制粘贴的办法也是可以的。还有更简捷的做法--选中一些字符
后,在“星际译王”主窗口的文本视区或系统托盘的图标 上按鼠标中键,被选中的字符会自动粘贴到
输入框中进行查询。
屏幕取词
无论英汉查询,还是汉英查询,都可以使用更简捷的屏幕取词法。这种方法允许用户用鼠标在屏幕上
任意窗口中取词,程序会自动弹出一浮动窗口,显示此单词的释义。如果被选取的是汉语,就会给出相应的英文;如果被选取的是英文,则会给出汉语解释。
主窗口左下角的“取词”复选按钮就是屏幕取词的切换开关。当它被勾选上时,就进入了屏幕取词状
态。
用屏幕取词法进行查询可以看作两个步骤,第一步是取词,第二步是查询。对于独立的英文单词的取
词,可以用鼠标双击该词,使单词处于反选状态即可。对于汉语或连续书写的英文,如果要对其中的某部分进行取词,则要采取点住横拉的办法,这和文本编辑时,选择复制区域的方法时一致的。
在默认情况下,取词和查询是自动连续进行的,在选词的同时就进行查询。这对于查独立的英文单词
的汉语释义比较适合。操作时,只需简单地用鼠标双击英文单词就可以完成取词,同时也就得到了汉语释义。
在查询指定选中区内释义时,若仍然让取词和查询自动连续进行,随着鼠标的拖动,浮动窗口会不停
地闪烁,感觉起来很不舒服;如果在编辑文本的同时允许屏幕取词,则会干扰编辑操作。对于这些情况,比较好的办法是把取词与查询分开。“星际译王”提供了在按下修饰键后再进行查询的选项,从而把这两个操作分开。
把取词与查询分开地具体配置方法是这样。单击主窗口右下角“首选项”按钮,会出现首选项配置窗
口,如图stardict-4,找到“取词”单击它,把“在修饰键按下时才取词”勾选上即可。可选的取词修饰键
有< Win>、
模糊查询
当记不清楚某个单词的具体拼写时,还可以尝试下星际译王的模糊查询。只需在所查的单词前加一
个“/”,回车即可。例如要查“mother”一词,因记不清r和e的先后顺序而错误地输入“mothre”,程
序会提示找不到该词。但如果采用模糊查询,程序就会给出“mother”这个词条及其释义了。
屏幕取词状态下,若要进行模糊查询,双击浮动窗口即可。
例6:“我爱背单词”
背单词软件是比较流行的一种学习软件,很多人都用它一边背单词,一边练习指法。
可以从红旗Linux4.1的工具盘中找到背单词软件的安装包。
当然可以用例4中提到的方法,借助工具盘中的安装程序安装这个软件。这里介绍用rpm 命令的安装
方法。
第一步,从工具盘中提取需要的rpm包。
先挂载相应的ISO文件:
mout -t iso9660 -o loop,iocharset=cp936 RedFlag-4-tool.iso /mnt/iso
然后借助autorun看背单词安装包包括哪些rpm包。
打勾的软件包就是“背单词”软件所必须的。根据这些信息,可以“猜测”出“背单词”软件所
需RPM包的文件名。转移到/mnt/iso/RedFlag/RPMS目录下,执行ls命令并以reciteword关键词过滤,就可以找到相应的rpm包了。
ls -l | grep reciteword
可以先把这5个文件复制到一个单独的目录里备用。
第二步,安装rpm包。
可以执行如下命令安装“背单词”软件的5个rpm包。
rpm -Uvh reciteword-0.8.1-10.i386.rpm
rpm -Uvh reciteword-books-0.8.1-2.i386.rpm
rpm -Uvh reciteword-dicts-0.8.1-2.i386.rpm
rpm -Uvh reciteword-RealPeopleTTS-0.8.1-2.i386.rpm
rpm -Uvh reciteword-skins-rw-0.8.1-2.i386.rpm
也可以执行如下一条命令来安装这5个包:
rpm -Uvh reciteword*.rpm nodeps force
*是文件名通配符,reciteword*.rpm 正好匹配上述5个文件包。
参数nodeps表示在安装时不检查软件包之间的依赖关系;force表示强制安装,即使系统中已经有了要安装的软件包,也会重新安装一遍,新安装的将覆盖原有的。
进行rpm包安装时,会出现进程提示。图11-5上述安装操作的提示信息。
安装完成后,从开始菜单中就可以启动“背单词”软件:
【开始】→【应用程序】→【我爱背单词】→【背单词】
软件安装完成后,不要忘记把ISO文件卸载。
umount /mnt/iso
非你不要 于 2005-05-02 21:13:00发表:
FTP服务
和 之间的Limit段改写成:
安装ProFTP 1.2.9
可以安装ProFTP来提供ftp服务。
可以下载得到ProFTP的安装包proftpd-1.2.9.tar.gz,先用tar命令解压。也可以在图形界面下,选中压缩包点鼠标右键,在弹出菜单中选择“解压”进行解压,形成后形成proftpd-1.2.9目录。
在命令行方式下,转入proftpd-1.2.9目录, 依次执行configure,make,make install,make clean等命令就可以完成安装完了。为了方便,可以把这些命令用分号(;)隔开写成一行,如下所示。
./configure;make;make install;make clean
ProFTP的安装程序会把配置文件proftpd.conf放在/usr/local/etc下,把可执行文件proftpd及 ftpshut 放在/usr/local/sbin下。
基本配置
在运行proftpd之前,需要对运行环境和proftpd的配置文件进行设置,以便该软件按要求运行。
首先,核实系统是否存在系统用户ftp的默认家目录,即/var/ftp这个目录。
/var/ftp这个目录是系统用户ftp的默认家目录,也是匿名ftp用户(anonymous)登陆后自动进入的目录。
如果没有/var/ftp,匿名ftp服务可能会有问题。
如果系统中没有/var/ftp这个目录,就应该创建它,并将其属主设成ftp。相应的命令如下:
mkdir /var/ftp
chown ftp.ftp /var/ftp
还有一种办法,就是修改系统用户ftp的属性,使其家目录指向其他已存在的目录。方法是:执行【开
始】→【设置】→【控制面板】→【本地用户和组】,找到ftp这个用户,选中它并点鼠标右键,执行弹出菜单的“属性”即可调出该用户的属性设置界面,在“主目录”中输入相应的目录,然后确定即可。
其次,修改proftpd的配置文件/usr/local/etc/proftpd.conf。
在配置文件中有User和 Group 项,是用来设定运行proftpd的身份的。其中,Group 项初始值设为
nogroup,而实际上红旗Linux4.1中并没有自动创建nogroup这个组,只有nobody这个组(其中有nobody用户)。因此,Group 项应改为
Group nobody
如果想给匿名用户开放写入权限,还应该修改配置文件中
#DenyAll
AllowAll
用户权限控制
经上述配置后,当以匿名身份登陆时,只能访问系统用户ftp的家目录。读写权限由配置文件控制。如
果创建了普通用户帐户,也可以用这个帐户来登陆ftp服务,密码就用该用户登陆系统时所用的密码。此用户登陆后的读写权限与直接登陆系统时的权限相同。这意味着,该用户以ftp方式登陆后,对系统中绝大多数文件和目录都有读的权限,都可以下载!在大多数情况下,这是比较危险的。
如果希望普通用户以ftp方式登陆后被限制在其家目录内,就需要让配置文件/usr/local/etc/proftpd.conf
中的DefaultRoot ~生效。方法很简单,把DefaultRoot ~之前的井号(#)删除即可。
启动
执行proftpd命令,就可以启动proftpd,以stand-alone模式提供FTP服务。带完整路径的命令如下:
/usr/local/sbin/proftpd
如果希望proftpd能被自动启动,则应打开/etc/rc.d/rc.local,加入如下一行内容。
/usr/local/sbin/proftpd
这样,每次启动计算机后,proftpd都会被自动启动。
相关命令
关闭FTP服务
ftpshut now
此命令会在/etc下生成文件shutmsg。此命令仅仅是停止FTP服务,并不是关闭proftpd程序。
重新开放FTP服务
ftpshut -R now
直接把/etc/shutmsg删除也能产生相同的效果。
查看服务器在线人数
ftpcount
显示在线人员名单
ftpwho
第11章 软件的安装和卸载
概述
一般的Linux系统套件都包含了丰富的应用程序,但有时并不能满足实际需要。这时就要涉及到对低版本软件的卸载、安装新版本软件,或者安装全新的应用软件。
简单的软件可能只包含一个可执行文件。但Linux系统中运行的大部分应用软件要复杂得多。一般的应用程序或工具软件都会由多个可执行文件、配置文件、文档组成,有的还会涉及库文件。把所有这些文件以及其存储位置的信息统一存储到在一起,就形成了安装包。讨论应用程序的安装和升级,就是要讨论对这些安装包的安装和维护。
在linux系统中,安装包有多种格式。本章将一般性地介绍TAR源码包和RPM包及其操作方法,实际使用时,会出现这样那样的差异。读者应结合本章的实例,学习对软件包的管理和维护。
提示:对软件包的管理和维护,需要以root身份进行。
TAR源码包
tar 源码包是在Linux环境下经常使用的一种源码发布的软件包。tar包文件一般都以“.tar.gz” 或“.tar.bz2”作为扩展名。比如,httpd-2.0.48.tar.gz,httpd 就是软件的名字,也就是提供WWW服务的Apache服务器软件,2.0.48 则是这个安装包的版本号,.tar.gz表示这是一个经过gzip压缩的tar包。再比如,kdevelop-
3.1.0.tar.bz2,kdevelop是软件的名字,这个软件提供了Linux下的C++集成开发环境,版本为3.1.0,其扩展名tar.bz2表明它是一个经过bzip压缩的tar包。
用tar包安装软件的一般过程是:首先,解开tar包,解包后一般都会形成一个以软件名命名的目录;
用其次,cd命令转移到这个目录,依次执行配置、编译和安装命令,安装工作就完成了;安装后,一般应清理一下安装过程中的一些临时文件。
下面是解tar包的命令例子:
tar -xvzf httpd-2.0.48.tar.gz
tar -xvjf httpd-2.0.52.tar.bz2
配置、编译和安装命令一般是如下三条:
./configure
make
make install
清理临时文件的命令如下:
make clean
如果要卸载,则执行如下的命令。
make uninstall
RPM包
对于小型软件,按上述方法安装是可以的。但对于比较复杂的软件,运行configure命令前还需要设置很多系统变量,configure命令本身也会要求提供复杂的参数。在安装前,必须自己检查文件的依赖关系。
这对于初学者是比较困难的。为了简化软件包的安装,就出现了一种被称为RPM的软件包。
RPM包也是非常常见的一种软件包。使用它安装软件,只需执行简单的命令即可。不需要人工检查依赖关系。操作RPM包的命令无非是安装和卸载两种。
安装的命令如下:
rpm -Uvh Kdevelope-3.1-1.rpm
其中,kdevelope-3.1-1.rpm是相应的RPM包文件名,对应的软件包名就是kdevelope,版本号为3.1-1,-Uvh是参数。
安装过程中可能出现“.. conflict with ... ”(可能是要安装的包里有一些文件可能会覆盖现有的文件)的警告或者提示而无法安装,如果确认可以覆盖相关文件,可以增加 “force” 参数。
还有一种提示是“... is needed by ...”或“... is not installed ... ”(此包需要的一些软件你没有安装)。一般而言,应该先把需要的软件安装好再安装本当前的软件。可以用“nodeps”参数忽略此信息。
也就是说,rpm -i force nodeps 可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能
如果要卸载kdevelope,则执行如下的命令。
rpm -e kdevelope
非你不要 于 2005-05-02 21:12:32发表:
第10章 搭建个人网站
Example
在一个被Windows垄断的办公环境中使用Linux办公,你就是少数,你就不得不照顾大多数人的习惯,想办法“兼容”大多数人。
一个比较有效的办法就是把自己的计算机改造成简单的个人网络服务器,利用流行的网络服务解决与大多数人交流电子文档的问题。
下面将讨论如何基于红旗Linux桌面版配置服务器,提供WWW/FTP服务的问题。注意,这里的讨论只适合个人使用。如果要搭建企业级的服务器,需要考虑更多的问题,这里介绍的方法也许并不够充分。
用Apache提供简单Web服务
假设要建立一个个人Web网站,允许别人能通过内部局域网访问这个网站,阅读文档或下载软件。网站的网页文件都存在/mnt/WinD/www123下,首页文件名是 index.html,可供下载的软件存在/mnt/WinD/unixsoft下。
安装Apache 2.0.53
Apache 服务器软件安装包是一个tar包,可以下载得到。其中包含所有的源程序。2.0.53版的文件名是httpd-2.0.53.tar.gz,也有 httpd-2.0.53.tar.bz2的,只是压缩方式不同而已。在图形界面下,选中压缩包点鼠标右键,在弹出菜单中选择“解压”即可完成解压,形成 httpd-2.0.53目录。
在命令行方式下,转入httpd-2.0.53目录,configure,make,make install,make clean等命令就可以完成安装完了。为了方便,可以把这些命令用分号(;)隔开写成一行,如下所示。
./configure;make;make install;make clean
这样做之后,安装程序会自动在/usr/local中创建 apache2 目录,Apache服务器软件的所有配置文件和可执行文件就都保存在这里。如果要卸载,只需将 apache2 目录删除即可。有两点需要注意:第一,安装时必须使用root身份;第二,如果httpd-2.0.53目录处于系统自动挂装的非ext2/ext3分区,执行configure命令可能会出错,导致无法正常安装。如果httpd-2.0.53目录在ext2/ext3分区,就不会出现这个问题了。因此,建议把解压形成的httpd-2.0.53目录放在/root目录之下。
配置
接下来要修改配置文件/usr/local/apache2/conf/httpd.conf来控制服务器软件,使其按要求运行。
首先,修改Listen行,确定服务的IP地址和端口号:
Listen 10.1.30.147:80
说明:10.1.30.144是当前计算机的IP地址,通过80端口提供Web服务。 此项不特意设也可,默认端口就是80。
其次,修改DocumentRoot ,设定主页所在的根目录。修改后形成如下两行:
DocumentRoot "/mnt/WinD/www123"
第三,修改DirectoryIndex行,确认首页的文件名在其中。如果没有就追加上。
DirectoryIndex index.html index.html.var第四,增加一个Alias,把/mnt/WinD/unixsoft映射为网站根目录下的unixdown目录。增加的内容如下:
Alias /unixdown/ "/mnt/WinD/unixsoft"
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
上述四步配置的目的是使局域网的其他计算机能用http://10.1.30.144/这个网址访问我的...钥吹轿募?斜怼?
启动和关闭
安装配置好之后,运行下面的命令是就可以启动这个WWW服务器了。
/usr/local/apache2/bin/apachectl start
若要重启动这个WWW服务器
/usr/local/apache2/bin/apachectl restart
若要关闭WWW服务
/usr/local/apache2/bin/apachectl stop
自动启动
如果希望系统每次启动时自动启动httpd服务器,则还要做如下工作。
首先,拷贝apachectl 到/etc/rc.d/init.d/,并更名为httpd ,相应的命令是:
cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd
然后,修改/etc/rc.d/init.d/httpd中的ARGV行,改成:
ARGV="start"
最后,在/etc/rc.d/rc5.d目录下,创建一个指向httpd的硬链接。相应的命令是:
ln /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S85httpd
为了保证在字符模式下启动红旗也能提供Web服务,还要在/etc/rc.d/rc3.d目录下,创建一个指向httpd的硬链接。相应的命令是:
ln /etc/rc.d/init.d/httpd /etc/rc.d/rc3.d/S85httpd
支持PHP的Web网站
上面已经建立了简单的Web网站。很多情况下,这已经能满足了文档和软件共享的需要。但有些时候,还需要记录网站被访问的次数、软件的下载次数,甚至需要建立一个简单的留言簿。这时,就需要使Web网站支持某种动态网页。在Linux上,一种最流行的支持动态网页的搭配就是:Apache+PHP。
下面就讨论如何用Apache和PHP搭建支持PHP的Web网站。
安装Apache 2.0.53
关于Apache的安装前面已经做了介绍。但为了与PHP配合工作,Apache的安装操作会有所变化。
对比前面“简单Web服务”的安装操作,在执行configure指令时稍有不同,需要给configure增加参
数enable-so使其支持可装载模块和标准的MPM prefork。具体来说在命令行方式下,转入httpd-2.0.53目录后,执行如下命令进行安装。
./configure enable-so
make;make install;make clean
安装PHP 5.0.2
PHP软件安装包也是一个tar包,可以下载得到。文件名为php-5.0.2.tar.gz,解压方法与Apache的相同。需要注意的是,为了能正常编译,最好直接在ext2/3分区上进行解压。解压后会形成php-5.0.2目录。
转入该目录开始安装。
安装PHP前应关闭Apache。
安装时configure指令需要参数,这个参数说明了Apache具体的安装路径。
./configure with-apxs2=/usr/local/apache2/bin/apxs
make
make install;make clean
安装完成后,还需要把php的配置文件复制到合适的目录下,具体命令如下:
cp php.ini-dist /usr/local/lib/php.ini
配置Apache
关于Apache的配置前面已经做过一些介绍。显然,在搭建支持PHP的Web网站时这些配置仍需要做。
为了使其与 PHP配合工作 ,还要增加如下的配置。
首先,检查配置文件/usr/local/apache2/conf/httpd.conf中是否有如下的条目(一般来说,在安装php的过程中,都会自动增加),如果没有,一定要添加以便Apache在启动时可以自动加载php模块。
LoadModule php5_module modules/libphp5.so
其次,还要手工增加如下两个条目:
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
第一条的含义是:如果文件扩展名为.php或.phtml,就要用PHP解析;第二条的含义是:如果文件扩
展名为.phps就按PHP语法高亮显示该源文件。
最后,还应该修改DirectoryIndex行,允许首页以index.php作为文件名。修改后的情况就是:
DirectoryIndex index.html index.php index.html.var
测试
做了上述配置后,这个Web网站就支持PHP了。可以编写一个简单的PHP文件phptest.php进行测试,
其中含有PHP语句即可。下面是一个例子:
echo "Hi, I´m a PHP script!";
?>
如果在浏览器上只显示了红色字体的文字,就说明该网站能正确解析PHP文件。
非你不要 于 2005-05-02 21:12:04发表:
用户管理
+ + 组合键切换进入Shell命令行方式时,有可能出现汉字乱显的现象。这是因为,这种Shell命令行方式在默认情况下是不支持汉字的。具体表现就是,用ls命令查看某目录内容时,如果其中有以汉字命名的文件或文件夹,将显示为乱码。
+<空格>组合键可以启动或关闭汉字输入法,按+组合键可以在各种输入法之间 进行切换。
改变身份。如果不指定用户名,则默认将用户身份换至root。从root身份切换到其他任何身份都不需
要口令。
su [username]
添加用户
例:
adduser -c "MyW" -d /home/workman -g root workman
设置用户口令
例:
passwd workman
安装和卸载软件
安装rpm软件
例:
rpm -Uvh kdevelope-3.1-1.i386.rpm
卸载rpm软件
例:
rpm -e kdevelope
配置、编译、安装、卸载源码发布的软件包。
./configure
make
make install
make clean
卸载源码发布的软件包
make uninstall
文件的打包和解包
解tar包
例:
tar -xvzf gaim-0.77.tar.gz
tar -jxvf XXX.tar.bz2
生成tar包
例:
tar cvf - /etc | gzip-9c > backup.tar.gz
生成rar包
rar a test.rar file1.txt
rar a test.rar dir1
解rar包
rar x test.rar
解zip包
unzip lumaqq_p3.zip
挂装一个iso文件,参数 iocharset=cp936 并不是必须的。如果被挂装的iso文件中存在中文文件名,此参数必须带,否则,中文文件名将显示为乱码。
mount -t iso9660 -o loop,iocharset=cp936 /data/myarc.iso /mnt/iso
卸装iso文件
umount /mnt/iso
生成一个iso文件
cp /dev/cdrom /home/gsh/TomJerry1.iso
远程Shell登录
ssh远程登录进行命令行操作
ssh -l workman 192.168.0.101
ssh远程登录进行文件的传送
sftp workman@192.168.0.101
磁盘信息的低级复制
把Linux分区引导扇区的信息提取出来生成一个文件bootsect.lnx,放到Windows的C盘。
dd if=/dev/hda2 of=bootsect.lnx bs=512 count=1
把bootdisk.img写到软盘上。
dd 使用缩略符号
波浪线 (~)代表家目录。如果现在位于/home/workman/MyOSS-Stuff/IOSN,那么只需执行“cd ~”就可
以回到家目录/home/workman而不必输入“cd /home/workman”。
一个点(.)代表当前目录,而“../” 代表上一级目录。“../”可以嵌套使用,比如“../../”。 if=bootdisk.img of=/dev/fd0
磁盘信息的低级复制
把Linux分区引导扇区的信息提取出来生成一个文件bootsect.lnx,放到Windows的C盘。
dd if=/dev/hda2 of=bootsect.lnx bs=512 count=1
把bootdisk.img写到软盘上。
dd if=bootdisk.img of=/dev/fd0
使用缩略符号
波浪线 (~)代表家目录。如果现在位于/home/workman/MyOSS-Stuff/IOSN,那么只需执行“cd ~”就可
以回到家目录/home/workman而不必输入“cd /home/workman”。
一个点(.)代表当前目录,而“../” 代表上一级目录。“../”可以嵌套使用,比如“../../”。
输出重定向
在默认的情况下,Linux从键盘接受输入,并将命令的输出送到屏幕。在有时候,这样做并不方便。比如,在一个目录里有很多文件,如果只用简单的ls命令,在屏幕上显示的输出结果可能上千行!为了得到我们需要的信息。我们或许需要把这些结果存储到一个文件中然后再查看这个文件,这就要用到系统的输出重定向功能。
输出重定向的操作符为>或>>。
单个大于号(>)后面紧跟文件名。如果指定的文件不存在,将建立这一文件。如果指定的文件存在,则
文件原有的内容将被覆盖。如果使用两个大于号(>>)则会把输出内容追加到原来文件里面。下面是一个例子:
1.[-(/tmp)> ls /usr/bin >> usr.bin
2.[-(/tmp)> wc -l usr.bin
3.2171 usr.bin
4.[-(/tmp)> ls /usr/bin >> usr.bin
5.[-(/tmp)> wc -l usr.bin
6.4342 usr.bin
7.[-(/tmp)> ls /usr/bin > usr.bin
8.[-(/tmp)> wc -l usr.bin
9.2171 usr.bin
注:行号是为了行文方便加入的,并不是shell的输出.
第1 行,/usr/bin中的文件列表被写入文件usr.bin,由于这个文件原来并不存在,系统会自动创建。从第3行可以看出usr.bin的行数。在第4 行又重复了第1行的命令,由于使用的是>>,usr/bin中的文件列表被追加写入文件,usr.bin的行数也就增加了一倍。在第7行我们使用了>, usr/bin中的文件列表被写入文件,usr.bin中原有的内容被覆盖了,行数也变成了新的值。
管道
将一个程序的标准输出写道一个文件中去,再将这个文件的内容作为另一个命令的标准输入,等效于
通过临时文件将两个命令结合起来。这种情况很普遍,需要Linux系统提供一种功能:它不需要或不必使用临时文件,就能将两条命令结合在一起。这种功能就是管道。
管道的操作符是一个竖杠 “|”。管道是可以嵌套使用的,因此可以把多个命令结合在一起。
接上例,如果执行下面的命令将直接返回/usr/bin中的文件列表的行数,而不是列表的内容。
ls /usr/bin | wc -l
远程Shell服务
支持远程操作是Linux的一个非常重要的特点。利用此功能,用户从另一台计算机远程登录上来,进
行Shell命令的操作。
红旗Linux4.1桌面版已经安装了支持远程操作的安全Shell服务软件OpenSSH。在默认情况下,此软
件并没有运行起来。可以通过服务控制启动OpenSSH来支持远程操作。下面介绍一下操作方法。
首先,从开始菜单启动服务管理工具,方法是:
【开始】→【设置】→【控制面板】→【服务】
从服务管理工具中找到sshd(安全Shell服务),如图9-2。选中它,从操作菜单中就可以启动安全Shell
服务 了:
【操作】→【启动】
如果希望,每次启动计算机时,自动启动安全Shell服务 ,可以选中它,修改它的属性:
【操作】→【属性】
修改属性的界面,把启动类别改成自动即可。
提示:如果想用一台装有windows系统的电脑进行远程操作,要在这台电脑上安装ssh客户端程序。
可以使用运行于Windows上的专用客户端程序SSHSecureShellClient。另外使用putty等通用的ssh客户端软件也能进行远程操作。
Shell下使用汉字
如果通过“系统终端”使用Shell,“系统终端”本身已支持汉字,并不会遇到困难。
在系统启动时直接进入Shell命令行方式时,或者用
要想在Shell命令行方式下正确显示和输入汉字,应该安装相应的中文环境。在红旗Linux4.1桌面版
的工具盘中,可以找到提供中文环境的软件,安装包的名字为zhcon。关于如何安装工具盘中所提供的软
件包,请参见“软件的安装与卸载”一章。
在已安装zhcon的情况下,进入Shell命令行方式后,应该执行一次如下命令,启动中文环境的支持功
能,这样就可以正确显示和输入汉字了。
zhcon
中文环境zhcon支持全拼、五笔等多种输入法。
按
非你不要 于 2005-05-02 21:11:25发表:
第9章 Shell命令行操作
+ +
+ +
键,当这样做时,系统将试图补全此时已输入的命令。如果已
键,系统则会给出可用来用来补全的字符串清单。使用命令补全功能,可以提高使用长命令或操作较长名字的文件或文件夹的都是非常有意义的。
Linux shell 简介
Linux shell指的是一种程序,有了它,用户就能通过键盘输入指令来操作计算机了。Shell会执行用户输入的命令,并且在显示器上显示执行结果。这种交互的全过程都是基于文本的,与其他各章介绍的图形化操作不同。这种面向命令行的用户界面被称为 CLI(Command Line interface)。在图形化用户界面(GUI)出现之前,人们一直是通过命令行界面来操作计算机的。
现在,基于图形界面的工具越来越多,许多工作都不必使用Shell就可以完成了。然而,专业的 Linux用户认为Shell是一个非常有用的工具,学习 Linux时一定要学习Shell,至少要掌握一些基础知识和基本的命令
启动shell
在启动Linux桌面系统后,Shell已经在后台运行起来了,但并没有显示出来。如果想让它显示出来,
按如下的组合键就可以:
组合键中的F2可以替换为F3、F4、F5、F6。
如果要回到图形界面,则按如下组合键:
另外,在图形桌面环境下运行“系统终端”也可以执行Shell命令,与用组合键切换出来的命令行界面
是等效的。“系统终端”启动后是一个命令行操作窗口,可以随时放大缩小,随时关闭,比较方便,推荐使用。启动“系统终端”的方法是:
【开始】 → 【应用程序】 → 【附件】 → 【系统终端】
该软件允许建立多个Shell客户端,它们相互独立,可以通过标签
在彼此之间进行切换。
Shell命令基本规则
一般格式
Shell命令的一般格式如下:
命令名 【选项】 【参数1】 【参数2】...
【选项】是对命令的特别定义,以减号(-)开始,多个选项可以用一个 减号(-)连起来,如ls -l -a 与
ls -la 相同。
【参数】提供命令运行的信息,或者是命令执行过程中所使用的文件名。
使用分号(可以将两个命令隔开,这样可以实现一行中输入多个命令。命令的执行顺序和输入的顺序
相同。
命令补全
在送入命令的任何时刻,可以按
经输入的字符串不足以唯一地确定它应该使用的命令,系统将发出警告声。再次按
历史命令
系统会把过去输入过的命令记忆下来,只要按方向键中的上下箭头,就可以选择以前输入过的命令了。
联机帮助
可以通过man命令来查看任何命令的联机帮助信息。它将命令名作为参数,该命令的语法格式为:
man 【命令名】
在任何命令之后给help参数,也可以显示该命令的帮助信息。
常用的Shell命令
目录和文件操作
查看当前目录相对于根目录的位置
pwd
查看当前目录内容
ls
以长格式查看当前目录内容。对应每个文件的条目将包括连接数目、所有者、大小、最后修改时间、
权限等内容
ls -l
改变当前目录。目的目录名可用相对路径表示,也可以用绝对路径表示。
cd [目的目录名]
转移到上一级目录
cd ..
创建目录
mkdir [新目录名]
例:
mkdir /var/ftp
删除空目录
rmdir [目录名]
例:
rmdir /var/ftp
递归删除一个目录中的所有文件和该目录本身。
rm -r [目录名]
复制文件
cp [源文件名] [目标文件名]
重命名文件
mv [源文件名] [目标文件名]
例:
mv /etc/rc.d/rc3.d/K50xinetd /etc/rc.d/rc3.d/S50xinetd
删除文件
rm [文件名]
不需确认地删除多个文件
rm -f [带通配符的文件名]
硬链接文件。不能对目录文件做硬链接,不能在不同的文件系统之间做硬链接。
ln [源文件名] [目标文件名]
如下面的例子。源文件abc.png存储在/root下,硬链接myabc.png存储在用户workman的家目录下。
做了这个链接之后,用户root和workman就可以使用不同的文件名来读写同一个图形文件。即使root把abc.png删除,这个图形文件仍然存在,只有当workman把myabc.png也删除后,这个文件才会彻底从计算机上消失。
ln /root/abc.png /home/workman/myabc.png
软链接文件。也就是符号链接。可用此法创建文件的快捷方式。
ln -s [源文件或文件夹名] [目标名]
按文件名查找文件。
find / -name nametofind -print
改变文件所有者。
例:
chown workman.workgroup /data/pub/upload
改变文件访问权限
例:
chmod -R 755 /usr/local/LumaQQ
查看一个文件有多少行
wc -l usr.bin
查看一个文件有多少字节
wc -c usr.bin
查看文本文件的内容
cat usr.bin
非你不要 于 2005-05-02 21:10:56发表:
设计
首先,定义一个CComputer对象数组,每个对象代表一台计算机。CComputer是用户自定义的类,其属性包括操作系统类型和所染病毒的传染概率 (用0到9范围内的整数表示,0代表无病毒),成员函数Contact()则用于模拟与其他计算机的交互。当一台染毒计算机与另一台计算机未染毒计算机进行交互时,病毒将扩散。为了方便,可以产生一个0到9范围内的随机数,当此随机数小于染毒计算机的传染概率时,就认为病毒扩散了。
其次,在主函数中产生两个小于N的互不相等的随机数,来确定一次交互中的两台计算机。
编写程序文件
创建工程的操作与前例相同。这里将工程命名为virus_os。
除了向导程序自动生成的那个含有主函数的文件virus_os.cpp外,还应该增加两个新文件,即
ccomputer.h和ccomputer.cpp,前者是含有CComputer类声明的头文件,后者含有CComputer类的实现方法。
执行菜单操作【File】→【New】即可增加新文件。注意在对话框中输入正确的文件名和文件类型,并
且“Add to project”复选框应该勾选上。
本例的源程序见linuxv-virus_os-0.0.1.tar.gz中的/src
编译
程序写好后,依前例进行生成源码结构、配置、编译等操作即可。
这个工程包括三个文件。执行菜单操作【Build】→【Compile File】只是对当前的文件进行编译。这为分别排除每个文件的语法错误提供了方便。
其他
编译成功后,即可依前例进行“生成可执行文件、调试、发布可执行文件、发布源程序”等操作,就
不再赘述了。本例的可执行文件见 virus_os。
例3改进程序
如果得到了某个用KDevelop开发的软件的全套工程文件,可以很容易地对其进行升级,然后发布新的版本。下面举例说明。
取得linuxv-virus_os-0.0.1.tar.gz后,解压缩形成一个目录,virus_os-0.0.1的全套工程文件就保存在其中。
启动KDevelop,然后执行【Project】→【Open Project】,找到virus_os.kdevelop并打开它,相应的工程也就打开了。调试成功后,可以按前面提到的方法发布修改后的软件即可。在发布前应修改版本号。修改方法是,执行菜单操作【Project】→【Project Options】,在随后出现的工程属性窗口中进行修改即可。
例4使用已有的源文件
前例的程序还有改进的余地:在CComputer类的基础上创建一个病毒扩散类CViruSpread来模拟病毒
扩散。当需要模拟不同计算机数量、不同操作系统布置比例以及不同病毒扩散概率条件下的病毒扩散情况时,就可以通过创建相应的对象来进行了。
新建工程virusimulator,创建CViruSpread的文件cviruspread.h和cviruspread.cpp。这里需要把
ccomputer.h 和ccomputer.cpp两个文件添加到本工程中来。操作方法:在KDevelop主窗口的右侧有一个Automake Manager标签。点击该标签,就可以看到本工程源文件所在的文件夹以及各文件。在列有文件的那个窗口上方有工具条,其中就是用来添加文件的。添加文件有两种方式,一种是链接(link)方式,另一种是复制(copy)方式。
本例的源程序见linuxv-virusimulator-0.0.1.tar.gz中的/src,可执行文件见 virusimulator。
非你不要 于 2005-05-02 21:10:29发表:
第二步,编辑程序文件
向导程序一般会创建一些程序文件,应该对这些文件进行编辑以满足特定的编程需要。
还可以执行菜单操作来增加新的文件。
【File】→【New】
上述操作后,会出现一个对话框,用于指定文件名和文件类型。根据文件类型的不同,会自动设定合
适的扩展名。注意,“Add to project”复选框应该勾选上以确保新文件被加入到当前的工程中。
第三步,生成源码结构
在编辑好程序文件后,要先借助GNU Build System生成系统生成源码结构。在增加了新文件(或目
录)、修改了文件(或目录)名、改变文件的保存位置之后,都应该重新生成源码结构。具体而言,生成源码结构包括autoconf、automake等操作,把每个子目录的Makefile.am变成了Makefile.in。具有源码结构的程序文件包可以在任何UNIX、LINUX的系统上使用简单的命令(即 configure/make/make install等)进行配置、编译、连接和安装。
可以执行菜单操作来生成源码结构:
【Build】→【Run automake&conf】
第四步,配置,即运行configure
configure是一个脚本,用来确定所处系统的细节,比如使用何种编译器、何种库,以及编译器和库的
保存位置,并把Makefile.in的相应部分进行替换,形成Makefile。
可以执行菜单操作来进行配置:
【Build】→【Run configure】
第五步,编译连接
执行菜单操作【Build】→【Built Project】即可完成编译连接,形成可执行文件。默认情况下,这种可执行文件是带有源码调试符号的。
对于多文件的程序,一般需要对每一个文件分别进行编译生成目标文件。当每个文件的编译通过之后,再统一进行编译连接。单独编译当前正在编辑的文件的菜单操作是:
【Build】→【Compile File】
第六步,运行
如果想在KDevelop的控制下运行已编译连接好的程序,可以执行菜单操作:
【Build】→【Excecute program】
如果想单独运行程序,则需要先安装,然后在命令行中输入相应的可执行文件的名字(一般来讲,就是
工程的名字)即可。KDevelop会把可执行文件放在/usr/local/bin之中
【Build】→【Install】
例1单文件面向过程C++编程
有观点认为,非跨平台病毒在操作系统混合部署的环境中,其扩散速度比较低。这里要编写一个程序
来模拟计算机病毒的扩散过程,直观地验证这个观点。
这里将使用C++语言。为简单起见,仍然使用面向过程的编程方法,程序文件也只有一个。学习本例
时,应着重理解用KDevelop编程的基本步骤。
问题陈述
假设有一个封闭的环境,其中有计算机N台。这N台计算机都可以选择安装A或B种操作系统。有一种非跨平台病毒病毒,能感染运行安装A操作系统的计算机。当染毒计算机与未染毒计算机交换时,此病毒将以概率pA 扩散。同理,设有另一种非跨平台病毒病毒,能感染运行安装B操作系统的计算机,扩散概率为pB 。把操作系统单一部署条件下的病毒扩散情况与两种操作系统按比例r:1混合部署时的扩散情况进行比较。
初始条件:设N=70,pA =pB =p=0.3,rO{0,1,2,3},r=0对应单一部署,其他对应混合
部署;单一部署时,有两台计算机已经感染了病毒;混合部署时,每种操作系统的计算机各有一台计算机已经感染了病毒。
输出:用数值和图形来表示感染病毒的计算机总数和增量的变换情况。
终止条件:当所有计算机都感染病毒时,停止模拟。
设计
首先,定义一个TComputer类型的数组,每个元素代表一台计算机。TComputer是用户自定义类型,其中记录计算机上的操作系统类型、以及是否感染了病毒等信息。应根据初始条件,对这个数组进行初始化。
其次,定义一个模拟计算机交互的函数ComputerContact(),用以模拟任意两台计算机的交互。当这两台计算机的操作系统一样,并且其中一台已经感染了病毒时,另一台计算机将以概率p感染病毒。为了方便,可以产生一个0到9范围内的随机数,当此随机数小于p*10时,就认为病毒扩散了。
第三,可以产生两个小于N的互不相等的随机数,来确定一次交互中的两台计算机。
编写程序文件
通过菜单操作【Project】→【New Project】启动新建工程向导程序,选择工程类型,并指定 工程名称及其保存位置,如图所示。接下来一路点击Next即可完成工程的创建工作。
向导程序会自动生成一个含有主函数的文件。以此文件是一个模板,在它的基础上修改并添加代码,
即可编写需要的程序。
本例的源程序见linuxv-viruspread-0.0.1.tar.gz中的/src/viruspread.cpp。
编译
程序写好后,应该把文件保存起来,然后按照前面提到的步骤,生成源码结构、配置、编译,即依次
执行如下菜单操作:
【Build】→【Run automake&conf】
【Build】→【Run configure】
【Build】→【Compile File】
每一个操作若能正常完成,在Messages窗口中会出现Success的提示。如果没有Success的提示,则表明相应的操作失败,应查明原因。
一般来讲,生成源码结构和配置这两个操作都能顺利通过。
如果编译连接是首次进行,则一般会失败,因为很少有人能一次写出没有任何语法错误的程序。查看
Messages窗口中的提示信息,可以了解哪些地方出现了语法错误。单击某一条错误提示信息,KDevelop会自动把光标定位到发生该错误的语句上。
依据错误提示,修正程序中的语法错误,然后再次尝试编译,直到出现Success的提示。
经常出现的一种情况是,程序上的一个语法错误会导致多条错误信息的出现。因此,应该把第一条错
误信息认真处理好,再从随后的错误信息中随机选择几条加以处理,然后就再次尝试编译,看还有没有错误信息。如此反复多次,直到把所有的错误提示消除掉,编译就成功了。不要把所有错误信息都依次处理完再尝试编译,那样的效率比较低。
生成可执行文件
编译成功后,执行菜单操作【Build】→【Built Project】即可生成相应的生成可执行文件。本例的可执行文件见 viruspread 。
调试
接下来,可以执行菜单操作【Build】→【Excecute program】试运行程序。这种运行是在KDevelop的控制下进行的。因此,如果出现“死循环”,可以执行菜单操作【Build】→【Stop】或按Esc键即可中止程序的运行。
如果在程序中存在逻辑错误,就得不到期望的结果。逻辑错误的排除比较困难。必须对程序进行仔细
的分析才能找到错误的原因。
一般的逻辑错误可以根据程序的运行表现加以判断。比较深层次的逻辑错误则需要借助调试工具。
本章前面介绍的调试工具GNU gdb就是一个很好的工具,可以用它对程序进行仔细分析,查找逻辑错
误的根源。默认情况下,经过【Build】→【Built Project】操作之后,可以在工程目录下的/debug/src/中找到带源代码调试符号的可执行文件。
发现逻辑错误后,就要修改程序,重新编译连接。然后再试运行。如果仍然得不到期望的结果,说明
程序中还有逻辑错误,应再次进行分析。如此反复多次,直到消除全部的逻辑错误。
发布可执行文件
如果只想发布程序的可执行文件,可以先调整项目的编译连接选项,选择优化编译的方式。这样可以
得到更小更快的可执行文件。
可以通过菜单【Project】→【Build Configuration】修改编译连接选项。此菜单之下有三种选项,默认为Debug,生成的可执行文件中含有源程序调试符号;还可以选择 Default或Optimized。选择Optimized时,编译连接时将进行优化,生成的可执行文件更小,执行起来也更快。
选择Debug时,可执行文件保存在工程目录下的/debug/src/中;选择Optimized时, 可执行文件保存在工程目录下的/optimized/src/中;选择Default时, 可执行文件保存在工程目录下的/src/中。
对于本例,三种选择所生成的可执行文件的大小差别很大。选择Debug时,93kb;选择Default时,
42kb ;选择Optimized时,只有8.8kb(见viruspread)。因此,如果要发布可执行文件,应该选择Optimized的方式进行编译连接。
发布源程序
把工程目录及其中的所有文件打包即可形成源程序包。linuxv-viruspread-0.0.1.tar.gz是本例的源程序包。
用户得到这个源程序包并解压后,不必安装KDevelop 就可以按标准方法进行编译和安装,即支持
configure,make,make install,make clean,make uninstall等命令。这个包也含有KDevelop的工程文件和其他相关的信息。因此,如果用户安装了KDevelop,可以直接打开该工程进行修改。
例2多文件面向对象的C++程序
前例程序中虽然有一些C++的成分,但程序的设计思想还是面向过程的。本例将采用面向对象的思想
对其进行改进。对象是C++中非常重要的成分。面向对象的编程往往可以使程序设计更直观,更简捷。
非你不要 于 2005-05-02 21:09:59发表:
基于文本的C/C++
C/C++语言非常灵活,是众多专业程序员最为喜欢的编程语言之一。
下面讨论基于文本的C/C++编程问题,主要涉及:如何编写程序,如何编译,如何调试,如何运行。
涉及的开发工具有GNU C/C++、GNU GDB。
vi最基本操作
要编程,第一步就是要写程序。用什么写呢?用文本编辑器Kedit和高级文本编辑器KWrite编写当然
可以。但这里要介绍是基于纯文本环境的编辑工具,那就是大名鼎鼎的vi。在以命令行方式启动Linux,或者通过ssh远程登陆到某Linux系统时,很可能只有vi这样一个工具可以用来编写程序。
vi用不同的颜色表示不同的程序元素,增加了程序的可读性,看起来也特别漂亮。好,下面结合一个
简单的例子,来讨论vi的最基本操作。值得注意的是,vi支持的操作是非常丰富的,这里只介绍最常用的操作。
执行下面的指令,在当前目录下建立一个文件名为calculator.c的程序文件。如果该文件已存在,此命
令将打开这个文件。
vi calculator.c
执行完上面的指令后,就进入了vi编辑界面。
下面说说vi最基本的操作方法。
进入编辑界面后,按i键就进入了“插入”模式,按Esc键就退出了“插入”模式。如此可以来回切
换。
不管哪种模式,都可以用光标键(←↑↓→)及Home、End、PageUp、PageDn键移动光标。这与图形方
式下的操作习惯是一致的。
在“插入”模式下就可以输入字符了。可以用Delete和BackSpace键删除字符。
在非“插入”模式下可以执行一些带冒号的指令。例如存盘,注意是输入一个冒号后面再跟一个字
母w。还有一些其他指令,列举如下:
q存盘并退出vi。
:q 退出vi。如果尚未保存,vi会提示,并拒绝退出。
:q! 不保存已做的修改,强制退出。
:g/str1/s//str2/g 寻找str2,并全都替换成str1。注意,s后面是两个斜杠(/)。 如果斜杠(/)本身就是str1或str2中的字符,则加前导反斜杠(\)区别。这一点对用vi编辑html文件的操作尤为有用。
要进行复制、粘贴、查找等操作,也必须在非“插入”模式下输入指令完成,这时输入的指令不带冒
号。现列举如下:
y5y包括光标所在行,往下数,复制5行到内存。若只复制一行,可以不写数字。
y3w复制光标后面的3个英文单词。
p 小写,把剪贴板内容粘贴到光标之后。
P 大写,把剪贴板内容粘贴到光标之前。
d3d包括光标所在行,往下数,剪切3行到内存。若只剪切一行,可以不写数字。接下若不进行粘贴
操作,就相当于删除操作。
/str1 寻找字符串str1,str1就是要寻找的字符串。 如果斜杠(/)本身就是str1中的字符,则加前导反
斜杠(\)区别。
C程序编译和运行
假设已经写好了一段C程序,源代码文件是calculator.c。那么,如何把它编译成可执行文件呢?
很简单,只需执行如下指令即可。-o表示要指定可执行文件的名字,可执行的文件名是calc。
gcc -o calc calcutlator.c
如果编译成功,就可以执行这个程序了。编译形成的可执行文件有5KB。
./calc
用GNU gdb调试
如果编译时,使用下面的指令(增加了参数-g),就会生成带源代码调试符号的可执行文件。 编译形成
的可执行文件有7KB。之所以增加了2KB,就是因为增加的调试符号。
gcc -o calc calcutlator.c -g
进一步地,就可以执行下面的指令启动调试工具进入调试环境对程序进行调试了。
gdb calc
在调试环境下,可以输入下列指令来控制调试。
l 28第一个字母是小写的L,列出第28行附近的源程序。
b sum 在sum函数处设断点
b 25 在第25行处设断点
r 运行程序
n 单步执行,不进入函数
s 单步执行,进入函数
c 继续连续执行
p choice显示变量choice的值
q 退出调试环境
k 杀死程序
C++程序的编译
假设用vi编写好了一个C++程序,源程序文件名为hello.cxx。如何编译?
编译,指定生成的可执行文件名为hw。
g++ -o hw hello.cxx
带源代码调试符号进行编译。
g++ -o hw hello.cxx -g
Kdevelop
安装和启动
在红旗Linux4.1的开发工具盘中,提供了集成开发环境Kdevelop3.0.92。可以下载相应的ISO文件并
利用其中的安装程序进行安装。安装完成后,从开始菜单中就可以启动Kdevelop:
【开始】→【应用程序】→【软件开发】→【Kdevelop】
利用Kdevelop可以编写C和C++程序,它把编辑、编译、调试和运行集成到一起,给编程工作带来很
大方便。
基本步骤
一般而言,用Kdevelop编程大体要经历如下几个步骤。编程是比较复杂的,很难一次成功,这些步骤
可能要反复进行多次。
第一步,新建工程
可以通过菜单操作启动相应的向导程序,借助它完成工程的初建工作。
【Project】→【New Project】
在新建工程过程中,主要需要指定工程文件保存位置、工程名称、工程类型,并且可以填写编程作者
的信息。根据所选工程类型(比如,是文本界面的程序还是图形界面的程序,是C程序还是C++程序),向导程序会自动生成一批模板文件。
非你不要 于 2005-05-02 21:09:22发表:
编制菜单条
双击gambas主窗口中的frmMain使程序的主窗体显示出来。在主窗体任意空白位置单击鼠标右键,执行其中的“菜单编辑器...”,就会出现“菜单编辑器”。
对于每一个菜单而言,最基本的属性是名称(Name)和题词(Caption)。“名称”相当于变量名,“题词”则是菜单项上显示的文字。除此之外,还可以规定菜单的组(Group)和标签(Tag),以及快捷键和图标(即“图片”项)。
菜单项之间排列的先后顺序可以用按钮调节,而菜单项之间的级别关系则用按钮调节。
这里,先定义了两个一级菜单,“文件”和“帮助”,它们并不对应具体的操作,仅仅是菜单的分类,因此定义好它们的题词即可,名称则可以随便定。在“文件” 之下设了两个子菜单:“新局”,执行它可以开始新的一局游戏,与“新局”按钮的功能是相同的,名称定为mnuNew;“关闭”,执行它将关闭窗口,结束程序,名称定为mnuClose。在“帮助”之下设了一个子菜单:“关于”,执行它将弹出一个提示窗口,用来显示程序的一些基础信息,比如编程时间,功能介绍等,名称定为mnuAbout。
把菜单项都描述好之后,单击“菜单编辑器”的“确定”按钮。这是就可以在主窗体的上方看到菜单条了。
增加窗体
执行“关于”菜单时,要弹出一个提示窗,因此需要在程序中增加一个窗体。其方法同创建主窗体类似:用鼠标右键点击工程名smartbaby或者其下面的分支,都会出现弹出菜单,执行【新建】→【窗体】
即可增加窗体。开发工具会询问窗体的名字,定名为frmAbout。如果把“默认的对话框管理”的复选框勾选上,系统会自动在窗口上添加“OK”和“Cancel”两个按钮,并添加相应的单击事件处理程序。
这里只打算用frmAbout显示关于“聪明宝贝”的一些基础信息,并不需要做任何操作。因此,应该在窗口中添加一个Label控件,并把要显示的信息赋给写到该控件的Text属性。
对于自动添加的两个按钮,理论上讲,保留其中任何一个就够了,因为它们的单击事件处理程序都会关闭本窗口。二者的区别在于,“OK”的单击事件处理程序在关闭本窗口时会携带一个参数“TRUE”,而“Cancel”不带。
编写菜单程序
在frmMain主窗体上,可以看到菜单条。用鼠标单击“文件”,此菜单将被展开。用鼠标单击某子菜单,比如“新局”,就可以编写相应的菜单项单击事件处理程序。
“新局”菜单程序如下:
PUBLIC SUB mnuNew_Click()
btnNew_Click()´“新局”按钮时间处理
END
当单击“新局”菜单时,将调用btnNew_Click()。换句话讲,“新局”菜单与“新局”按钮的功能是相同的。
“关闭”菜单程序如下:
PUBLIC SUB mnuClose_Click()
ME.Close()´关闭程序
END
ME.Close()作用就是关闭当前窗口,而当前窗口是本程序的主要窗口,关闭窗口也就意味着关闭本程序。
“关于...”菜单程序如下:
PUBLIC SUB mnuAbout_Click()
frmAbout.Run ´显示“关于”对话框
END
frmAbout.Run调用了frmAbout中的方法RUN,其作用就是运行frmAbout窗口。进一步查看frmAbout.Run的代码如下:
STATIC PUBLIC FUNCTION Run() AS Boolean
DIM hForm AS Form
hForm = NEW frmAbout
RETURN hForm.ShowModal()
END
这段代码是在创建窗口时自动生成的,其作用就是显示frmAbout窗口。
发布新软件
修改完成并测试没有问题后,就可以考虑发布问题的。
因为已经对软件做了修改,因此版本号应该有变化。
具体操作请参见。在Gambas的主窗口上执行【工程】→【属性】,就会弹出工程属性的设置窗口,在这里可以对版本号进行修改。这里定义新软件版本号为0.0-2,因此只需把“释放”后面的数字改成“2”即可。
最后,按前面的“发布软件”介绍的方法制作安装包和源程序包,就可以发布新的软件了。
进一步改进的提示
程序还有更多的改进余地,下面给出一些提示,以便读者练习。
首先从界面上看,有10数字按钮,1个“新局”按钮,布局不对称,可以考虑再增加一个按钮,使界面的布局更合理。这个新增按钮的功能与“新局”按钮相同,用图而不是用文字表明其功能。
其次,“聪明宝贝”显然是为为2-4岁的学龄前儿童设计的。这么小的孩子也许根本就不认识数字,更不会加法运算。可以考虑为数字加图形提示,用图形示意加法的运算。
最后,为了增加游戏的趣味性,可以规定一局出几道题,比如每5题一局。在每一局游戏中,每答对一道题时就奖励一颗星,而答错了就给一个小红脸。
非你不要 于 2005-05-02 21:08:51发表:
运行
在编程过程中,每增加一些新代码之后,就要运行一次。如果新代码中有错误,就无法运行并会出现错误提示。此时应该根据提示认真查看错误的行,修正错误,然后再尝试运行,直到成功运行起来。
能运行起来,表明没有语法错误,但并不表明没有逻辑错误。要想发现逻辑错误,只能实际用用这个软件,看它是否实现了预期的功能。
到目前为止,已经编写了随机数的产生和题目显示的有关代码,应该验证一下程序自动出的题目是否具有随机性,并被正确的显示出来。
经过验证,我们发现,每次启动“聪明宝贝”之后,第一次点击“新局”按钮产生的题目总是“0+1=”,第二道题是“7+4=”,第三道题是“5+2=”,……,依此类推。这显然与预期的效果不同。
怎样才能让每次启动后出的题目都不相同呢?
查帮助排除逻辑错误
其实解决上面发现的问题很容易。读者在这里着重学习的,应该是解决问题的方法。
为了了解导致上述问题的真正原因,应该深入了解一下Rnd()函数,最好的办法就是查看帮助。执行Gambas主窗口菜单【帮助】→【帮助浏览器】就可以查看帮助了。
在帮助浏览器的“查找”标签中,有一个文本框,在其中输入“rnd”,然后回车,就会出现一个列表,在其中可以找到“Rnd”,单击它,就可以看到有关Rnd()函数的介绍了。
在rnd()函数介绍的下面有一个“See also”,翻译过来就是“参见”的意思。帮助系统提示参见什么呢?“Randomize”,即,“随机化”。单击这个链接,可以看到,Randomize 是一个随机数初始化函数。
它会以当前的日期和时间为参照,对随机数进行初始化。这到底是什么意思呢?还是不太明白。没关系,可以试试。
在对a、b赋值语句之前,增加如下一行代码:
Randomize()
然后再运行程序,可以发现每次启动程序后,题目都是各不同的。
至此,随机题目的产生和显示问题就解决了。
编程第三回
下面考虑输入答案并判断其正确性的问题。
添加控件组
要用按钮实现数字的输入,就要增加10个Button(按钮)控件,分别用来输入0、1、2、……8、9。
添加控件的操作并不复杂,在上面已经讨论过了。
这里面存在一个问题:10个按钮,是不是需要编写10个事件处理程序来处理它们的点击事件呢?这会很麻烦,显然是不合理的。应该有一种途径,能够让这10个按钮共享一段事件处理代码。这就要用到控件的Group(组)属性。
当设置了控件的Group属性后,某控件所发生的事件都会当成群事件来处理,运行的是群事件处理代码。可以增加10个按钮控件,分别将其Name(名称) 属性设为btn0,btn1,…,btn9,而将它们的Group属性设为digits。这样设置之后,点击这10个按钮控件中的任何一个而产生的点击事件都将由digits_Click()处理。
这样又会产生另一个问题:Group(组)属性使多个按钮的事件由同一段代码处理成为可能,但对于同一组的不同控件而言,其处理可能存在细微的差别。于是,还有必要区分出一个事件具体是由哪个控件触发的。这就要用到控件的tag(标签)属性。可以为 tag(标签)属性设置任何相关的数据。在 digits_Click()中将可以引用这个属性值。因此,可以把btn0,btn1,…,btn9的tag属性依次设置为0,1,…,9。
还有一个属性需要设置的是text(文本),它是按钮上显示出来的文字。依次设置为0,1,…,9。
顺便指出,属于某一组的控件不必是同一种控件,把Button和Label控件放到同一个组里是允许的。
这比控件数组更为灵活。
答案的输入处理代码
下面编写代码,使游戏者可以通过点击按钮来输入答案。
因为各个数字按钮属于同一个组,要编写各按钮的单击事件处理程序,实际上是要编写组事件处理程序。
下面是定义好的程序代码:
PUBLIC SUB digits_Click()
lblDisplay.Caption =lblDisplay.Caption &LAST.tag
END
当点击0,1,…,9任何一个按钮时,都会执行这段代码。LAST代表刚刚点击过的按钮,这是在组事件处理程序中的专用标识。而LAST.tag提取了LAST的tag属性,也就是刚刚点击过的按钮的tag属性。
答案正确性判断代码
要判断答案是否正确,首先应该计算出正确的结果并暂存到某个变量。不妨将此变量命名为StandardAnswer,在btnNew_Click()中,产生随机题目之后,就可以立即计算StandardAnswer的值了。
在游戏者输入答案后,还需要进行比较,也就是要在digits_Click()中增加判断程序,把StandardAnswer的值与输入的答案进行比较,如果一样,就认为回答正确。
显然,在btnNew_Click()和digits_Click()中引用的StandardAnswer应该是同一个值。在这种情况下,应该将 StandardAnswer定义为公共的变量。如何定义呢?在代码编辑窗口,´ Gambas class file之下添加如下代码:
STATIC PUBLIC standardAnswer AS Integer
这段代码写在btnNew_Click()和digits_Click()之外,就表明它是一个公共变量,可以被二者引用。
在btnNew_Click()增加下列赋值语句,使standardAnswer记录正确的结果:
standardAnswer=a+b
判断过程要稍微麻烦一些。首先是判断时机的问题。两个0~9的数字之和有可能是一位数字,也可能是两位数字。当答案是一位数时,游戏者输入一个就可以判断;当答案是两位数时,应等游戏输入两位数字(即单击两个数字按钮)之后再进行判断。其次,要分析游戏者单击按钮的动作,确定输入的答案是什么。
第三是进行判断。第四,根据判断结果,给出适当的结论。
为了记录输入的答案,需要定义一个字符串变量sAnswer。考虑到有的答案需要两次单击按钮,即需要两次执行digits_Click()。在第二次执行 digits_Click()时,应使sAnswer把本次输入的数字与上次输入的数字结合起来,作为答案。因此,应该将它定义成公共变量:
STATIC PUBLIC sAnswer AS String
在每次出题之后,应该将清空,做好接收新输入的准备。因此,还要在btnNew_Click()增加下列赋值语句:
sAnswer=""
为了显示结论,还应该增加一个Label,放在窗口底部。将该控件定名为lblRemind。
做好了上诉变量和控件准备后,即可以在digits_Click()中增加判断代码了。具体代码如下:
sAnswer=sAnswer&LAST.tag
IF Len(Str$(Val(sAnswer)))=Len(Str$(standardAnswer))THEN
IF Val(sAnswer)=standardAnswer THEN
lblRemind.Text ="正确!"
ELSE
lblRemind.Text ="不对,正确答案应该是 "&Str$(standardAnswer)
ENDIF
ENDIF
代码行 sAnswer=sAnswer&LAST.tag负责将游戏者点击的数字累积记录下来。
判断语句IF Len(Str$(Val(sAnswer)))=Len(Str$(standardAnswer))THEN确定了判断时机。当 sAnswer记录的数字字串长度与standardAnswer的数字位数相同时,就可以进行判断了。
代码段 IF Val(sAnswer)=standardAnswer THEN则具体负责判断答案的正确性,然后修改lblRemind的Text属性 ,显示出合理的提示信息作为结论。
添加注释
增加了判断代码之后,程序已经变得比较复杂了。为了增加代码的可读性,便于将来修改和维护,应该添加注释。其实,应该养成一边写程序,一边加注释的习惯。
加注释的方法比较简单,先输入一个单引号(´),然后输入相应的注释文字即可。代码编辑窗口列出了本程序所有的代码及其注释。
发布软件
在程序编写并全面测试通过之后,就可以制作安装包进行发布了。如果要开放源码,还应该制作源码包。
制作安装包
Gambas提供了安装包向导,可以把软件打成rpm包。用户得到该rpm包后,用通用的rpm包安装方法即可安装使用。
执行gambas主窗口菜单【工程】→【制作安装包】即可启动安装包向导。
安装包向导首先要询问维护者的信息和对该软件的描述。这里注意,描述文字可以用英文或者汉语拼音,但建议不要用汉字。
接下来要添加修改日志。这里可以用汉字。
下一步是选择安装包的运行平台。有Mandrake, RedHat, SuSE等几种选择。至少要选择一种运行平台。
比如选择RedHat。接下来是选择安装包的组。比如选Applications/Multimedia。
再接下来是要指定该软件安装时自动创建快捷方式在开始菜单中的保存位置。比如选Game。然后是选择包的存放目录,可以选择保存到自己的家目录中。
做了上述设置后,点击“确定”就可以开始创建安装包了。
制作源程序包
源程序包的制作比较简单。执行gambas主窗口菜单【工程】→【制作源程序包】,指定源程序包的保存位置就可以制作源程序包了。
包测试
已创建的包有两种,一种是安装包,即扩展名为.rpm的,该包的主文件名由工程名和版本号组成。另一种是源程序包,扩展名是.tar.gz。“聪明宝贝” 的安装包文件为smartbaby-0.0-1.noarch.rpm,源程序包文件为smartbaby-0.0-1.tar.gz。
对于安装包,应该测试是否能按rpm包常规安装和卸载方法进行安装或卸载。
经测试,用.rpm安装包安装时,会出现确定依赖文件失败的错误(Fail dependencies),这也许是由gambas与红旗Linux系统配合不好引起的一个小bug。只要在系统中已安装了gambas,这种错误可以忽略。使用“nodeps”参数可以确保成功安装。
安装成功后,可以在【开始】→【应用程序】→【游戏】找到相应的启动项。值得注意的是,gambas开发的软件要想成功运行需要解释程序gbx的支持,而gbx就在gambas之中。
可以用常规方法卸载程序。
对于源程序包,应该测试是否能正常解压,能否用gambas打开。
改进程序
在linux上运行的程序,大多都是开放源程序的。取得源程序包后,就可以对程序进行修改,提高它的性能.
这里计划对“聪明宝贝”做几点改进:程序没有菜单,这看起来不像标准的应用软件,增加菜单;增加“关于”的窗口,显示程序的开发信息。
准备源程序
找到聪明宝贝0.0-1的源程序包smartbaby-0.0-1.tar.gz,将其解压缩。可以看到,解压缩后形成的目录
名字为smartbaby。启动gambas,找到这个目录。该目录的图标正是gambas为每个工程设定的默认图标,这说明gambas已经识别到该目录下的文件是gambas创建的工程文件了。
选中它,单击确定按钮,就可以打开这个工程了。
运行一下,看是否正常。如果没有意外,应该能正常执行。
到此,修改前的准备工作就做好了。