Emacs入门指南(1)

很早就听说Emacs这个开源的文件编辑器了,听说它的功能非常的强大,于是决定试用一下,没想到试用结果是这个“最好用”的编辑器给我的第一印象是“不知所揩”,但随着不断的学习,我开始体验到Emacs的巨大魅力,并着手开始这个入门提南,希望能把这个文本编辑器介绍给更多的朋友。如果您已经熟悉Emacs,这个指南不是为您准备的,这个指南只打算介绍Emacs中最基本的功能,为初学者提供一个入门的机会。另外这篇文章是以Windows平台下的Emacs来讲述的,如果您在其它平台上使用,也可以参照着看看。

废话少说,我们开始我们的学习之旅吧。

首先当然是要获得Emacs软件的程序包并安装它,在http://www.gnu.org/software/emacs/emacs.html上的第5节Obtaining GNU Emacs中您可以找到它的下载地址。我下载的是emacs-21.3-fullbin-i386.tar.gz这个Windows平台上21.3版的完整包。您也可以通过Emacs在savannah.gnu.org的CVS下载最新的Emacs单个文件。(什么?不知道什么是CVS?哦,它是一个开源的版本控制软件,不知道就当我没说这句话吧。下回我再写个CVS的入门指南。)

Emacs不用安装,直接解压后就可以使用了,我把它解在了D:/Program Files/emacs-21.3目录中,以后可能会提到“Emacs的安装目录”就是指它。

在Emacs的安装目录下的bin目录中就有Emacs的可执行文件了,它是emacs.exe,双击即可运行它。如果希望在控制台环境下以控制台风格来运行它,可以加上参数-nw,表示No Window。另外,运行bin目录中的addpm.exe,可以自动为Emacs在开始菜单中建立一个菜单项。我还建议大家在系统的Send To文件夹中为Emacs.exe建立一个快捷方式,这样什么想用Emacs打开的文件都只要用右键点它选“发送到”Emacs就可以了。

相信到现在为止,大家已经看到Emacs不那么友好的界面了,刚启动Emacs时它会出现一个介绍的封面,点鼠标或按任意键就会切换到一个名为*scratch*的Buffer,上面有三行注释,说你可以在这里随便写点不需存盘的文字,或者可以打一些要执行的Lisp语句,如果要创建文件,请按C-x C-f。

在真正开始使用Emacs之前,请大家注意下面一点:

由于历史的原因,Emacs中很多术语、表示方法和操作习惯与现在惯用的不一致,在学习时要时刻记住这一点,避免混淆。在本文中,将遵循Emacs术语,表用英文表示。

开始编辑一个新文件的方法是按C-x C-f,这个表示法的意思是:先按一下Ctrl+x,然后再按一下Ctrl+f(当然你也可以按着Ctrl不放,分别敲x和f键)。这时,在Emacs的Frame(在Emacs术语中,Frame是指我们习惯上在Windows中说的“窗口”,而Window这个术语是指在一个Frame中的几个独立的区域)底部的Minibuffer中会出现提示:Find file: D:/Program Files/emacs-21.3/bin/,在这里就可以输入要新建的文件的文件名了,默认的路径就是D:/Program Files/emacs-21.3/bin/。如果不改变默认路径,直接输入一个文件名,它就会在Emacs中新开一个空白Buffer用于编辑。如果输入一个已存在的文件名,就会在一个新的Buffer中打开这个文件用于编辑。也就是说C-x C-f是一个可以用于新建或打开文件的命令,难怪它在Emacs手册中被解释为Visit a file而不是New file或Open file。

在大多数的情况下,您似乎并不会很乐意在默认的Emacs安装目录下建立文件,所以您可能需要把已经出现的默认路径清除再写您的实际的路径。其实不需要这样麻烦,Emacs在很多很细小的东西上都做的非常人性化,您只需在它的默认路径最后一个/后接着打一个/就可以直接输入实际的文件路径了,比如,我不管它的默认路径,直接输入/C:/1.txt就可以建立或打开C盘根目中的1.txt文件了,在输入路径和文件名时,可以只输入一部分,然后按<Tab>键,Emacs会设法帮您自动补充完整,就像在Linux和高版本Windows命令提示符下输入文件名和路径一样。

Emacs的很重要的一个设计理念就是要让您的双手在整个操作过程中不离开主键盘(就是指字母和数字键这个区域),以追求最高的工作效率。所以本文中对鼠标操作的介绍会比较少。

如果要用鼠标来操作Emacs新建或打开一个文件,可以点File菜单的Open File一项。用键盘也可以选菜单,但决不是Alt+F之类的,您可以按F10键,然后再选项相应的菜单项,F10的表现型式在Windows界面下和在Console界面下是不一样的,但操作方法一致。

现在您已经正确的打开了一个新的Buffer来编辑文件了,您可以试着输入一些东西。输入中,如果超过了行末,Emacs会自动换行并显示一个续行符。

也许您在输入过程中尝试了“复制/剪切/粘贴”这样的操作,结果一定很令人失望,Windows中常用的Ctrl+C/Ctrl+V等快捷键都不对了,再次提醒您记住,学习Emacs就要忘记以前很多的东西。当你慢慢熟悉Emacs,你会喜欢这个强大的编辑器的。

在您发现在敲快捷的过程中发生了错误,在大多数的情况下,您可以按C-g快捷键来中断当前的错误命令从头开始。比如您不小心按了C-s,这是Windows中保存文件常用的快捷键,它却在Mini-Buffer中提示您I-search:这里就可以按C-g退出,返回正常状态,同时Minibuffer中会显示Quit表示退出了当前命令。

要保存文件,正确的命令是C-x C-s。要退出Emacs,正确的命令是C-x C-c,如果有Buffer中的内容修改了未保存,它会作相应的提示,如果您选择不存,它还要进一步确认是否真的要退出Emacs。

至此,您已经可以用Emacs打开或新建一个文件,编辑并保存,然后退出Emacs了。

也许您觉得我写得挺罗嗦的,进度也很慢,您可以不看我的文章,直接去阅读Emacs的教程,它用很精辟的方式描述了Emacs最基本的使用方法。进入Emacs后,按C-h t(先按C-h,再按t键,注意不是C-h C-t)就可以阅读它了。目前Release的Emacs中还没有包含中文的教程,您可以在Emacs的CVS的etc目录中找到中文的教程,文件名为TUTORIAL.cn(简体)和TUTORIAL.zh(繁体),下一版的Emacs中应该会包含这些文件。

(2004-06-24)Intel软件腾飞计划南京站活动

今天去了南大参加Intel软件腾飞计划南京站教育专场的活动。

活动包括了以下议程:资料及礼品分发、开幕致词、英特尔软件产品使用及培训介绍、英特尔开发商服务、英特尔硬件技术介绍和抽奖。

所谓资料就一个小袋子,装了一调查表一开发商服务注册表和一开发商服务介绍单,与微软搞活时发的厚厚的资料袋实在不能比,袋子里还随机装入了小礼品:笔袋或者帽子,好像还有一种电动的好像的小吸尘器的东西。

南京大学软件学院的领导致了开幕词,但好像没有什么实质性的内容。

软件产品介绍中介绍了几种Intel的软件产品,包括Intel C++ Compiler,Fortran Compiler,VTune一个软件性能评测和改进工具,Thread Checker一个多线程软件检查工具,Math Kernel Library一个高性能数学库等。整个介绍比较抽象,有些内容似乎不是很容易听明白,最后演示了Intel优化工具的强大威力,可以把一个HDTV视频 播放程序由没有优化时的大约15Frames/s提高到大约29Frames/s。

开发商服务介绍内容比较简短,主要介绍了一下Intel的开发商服务网站。

硬件技术介绍部分,主要介绍了Hyper Threading和 OpenMP(一个多线程程序解决方案)的内容,个人感觉是整个活动中比较有听头的一个部分。尤其是OpenMP的一部分,以前了解不多,听了一下感觉还 不错,它可以比较方便的实现多线程程序的开发,可以到www.openmp.org上了解更多的信息。

最后就是Q&A,以及开发商注册表抽奖,送出了十几个精美的腕表(据说还是SEIKO精工的机芯),可惜我们一行七人谁也没有这样好的运气。临 走时发放了一些试用版软件光盘,我有幸“抢”到了一张,上面包括了前面介绍的所有软件的试用版,它们也都可以在Intel网站上下载。

回到学校迫不及待的试用了光盘上的软件,比较麻烦,费了不少工夫才从Intel网站注册成功,收到了注册文件,安装了Intel C++ Compiler,很顺利,与我机器上Visual Sudio .NET 2003整合得也很好。打开一个Visual C++工程后只需右键点击选择转换为Intel C++工程,编译速度还不错,时间有限,没有作进一步的测试。又装了VTune,安装后会自动弹出一个教程,大致看了一点,还挺不错的,不过还没有耐心看 完它,随便用了一下VTune,很遗憾,不会用。看来还得抓紧时间学习,在试用期过去之前体验它一下。

前几天没有搞定的CVS通过SSH2连savannah.gnu.org的问题还是没有搞定,给CTT协调组负责人发的求助邮件也还没有回音,真不知怎么办,看来只能先翻译好文章再发给协调人让他帮助上传了。

移植智能ABC输入法到Windows XP

又是一篇没有被杂志社录用的文章,其实我觉得这文章还是挺有用的~~~

====

Windows XP中文版虽然还没有正式发布,但相信不少电脑爱好者早就在使用一个版本号为6.0.2600.0的英文版Windows XP了。习惯使用智能ABC输入法的朋友们一定发现了一个严重的问题:Windows XP中没有智能ABC输入法,倒是新版的微软拼音成了默认的中文输入法。如何才能在Windows XP中使用智能ABC已经成了一个当务之急。经过反复的试验,我终于找到了能让智能ABC输入法在XP中正常工作的方法。

首先,要设法取得智能ABC的输入法文件(IME文件)及相关的辅助文件。这些文件可以从以前版本的Windows 98/Me/2000中获得,智能ABC输入法包括winabc.ime、winabc.ovl、winabc.hlp等一批文件,用查找文件工具查找所有文件名为winabc的文件就可以了,一般可以找到5个文件,它们通常是位于Win98/Me的System文件夹和HELP文件夹中或是在Windows 2000的SYSTEM32文件夹中。

找到这些文件后,把它们复制到Windows XP的system32文件夹中。但仅仅这样做,还是不能在Windows XP的文字服务中把智能ABC输入法添加进来。

下面的工作就是要修改注册表了。在Windows XP中运行regedit注册表编辑器,依次展开My Computer/HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Control/Keyboard Layouts,这时你可以看到系统列出了一系列的主键,这每一个键就对应了一种输入法,其中键名以0804结尾的键对应了简体中文输入法。

现在我们要做的就是在Keyboard Layouts中建一个新的键,比如叫E0110804,根据我的试验,只要保证E0开头,0804结尾,并且与现有的键不重名就可以。

建好主键以后,就可以在右面的窗格中建立一系列的值了。这里,我们需要建立3个字符串类型的值,如下:

IME File  winabc.ime
Layout File kbdus.dll
Layout Text 智能ABC输入法版本5.0

其中,IME File就指明了智能ABC输入法的IME文件是winabc.ime,而Layout Text指明了这个输入法在文字服务中的名字叫“智能ABC输入法版本5.0”。

关闭注册表编辑器,至此,我们的移植工作就基本完成了。

接下来,打开“控制面板”中的区域和语言选项,在“语言”页中点文字服务的详细信息,这里就可以把智能ABC添加到系统的输入法列表中了。先选择输入语言中简体中文,然后,在下面的键盘布局中就会出现你自己添加的“智能ABC输入法版本5.0”输入法了,选中它,确定,一切OK!

巧用Windows XP网桥实现三机互联

曾经写的一篇文章,投给某杂志社的,可惜他们没要~~~

====

在现实生活中,尤其在校园里,经常会遇到要将三台计算机连接起来组成小型局域网,共享系统资源和网络资源的情况。通常实现的方法不外乎两种:一是每台计算机安装一块网卡,然后用一个集线器把它们连接起来。这样做的缺点在于100M集线器的价格对于学生来说实在是不菲,于是往往只能购买10M的集线器,无法享用高速的以太网。另一种方法就是用四块网卡把三台机器连起来,在其中一台计算机上安装两块网卡,并安装相应的网关路由软件,实现三机互连。这样做的缺点在于安装与设置比较麻烦,而且两台只安装一块网卡的计算机之间一般无法通过“网上邻居”互访。

现在有了Windows XP,它自身集成的Network Bridge(网桥)功能,完美的解决了这个问题。Windows XP的网桥提供了一种简易而又低成本的连接两个网段的功能。

假设现在有三台计算机A、B、C,其中A机上安装有两块网卡和一个调制解调器,用作服务器,B、C两台计算机分别连接在A机的两块网卡上,构成一个有两个网段的局域网。其中A机上安装的是Windows XP操作系统,BC机上的操作系统则不限。我们希望通过这样的装备,实现三机互连共享资源和上网。

我们首先来配置上网服务器,打开A机的Network Connections窗口,里面列出了当前网络连接的情况(如图一),包括一个用于上网的163拨号连接和两个局域网连接。我们先分别打开两个局域网连接(也就是对应了两块网卡)的属性对话框,对它们的Internet Protocol (TCP/IP)协议进行配置。我们把两块网卡的IP地址分别设为192.168.0.2和192.168.0.3,子网掩码为255.255.255.0,网关和DNS留空,关闭属性对话框,保存设置。

下面来配置B机和C机。分别将两台计算机的IP地址设置为192.168.0.4和192.168.0.5,子网掩码同样为255.255.255.0,网关和DNS暂时可以留空。

经过上面的操作,ABC三机之间的小型局域网就算是初步建立起来了,A与B,A与C之间均可以互相通信,但BC两机之间无法通信,暂时也还不能共享上网。下面就将要让本文的主角——Windows XP网桥——来大显身手了。

在Network Connections窗口中点住鼠标并拖动,就可以像在我的电脑中选择文件一样把两个局域网连接同时选中,单击鼠标右键,弹出了快捷菜单,里面只有一项“Bridge Connections”可用,就选择它!

经过一段时间的等待,一个名为Network Bridge的新的网络连接就建立了起来(如图二)。下面我们要做的就是对它进行一点小小的配置,右键点击Network Bridge连接,选择“Properties(属性)”,打开它的属性对话框,同样我们要对它的TCP/IP协议进行配置。我们把它的IP地址设置为192.168.0.1,子网掩码是255.255.255.0,确认关闭就行了。要注意这里的IP地址必须是192.168.0.1,这是保证后面Internet连接共享正常工作的必要条件。这时A机的IP地址就由前面的192.168.0.2和192.168.0.3两个地址统一为一个192.168.0.1,就像只安装了一块网卡一样。

好了,分别在三台计算机上打开网上邻居看看吧!怎么样,三台计算之间的通信已经建立起来了吧!如果你不能在网上邻居中看到自己或别人,可以试着刷新几次,如果没有效果,你就要自己检查一下是不是设置有什么问题,可以到DOS窗口下用PING命令测试一下网络的通断。还不要忘记检查是否打开了文件共享的功能,如果是Windows 98/Me与Windows 2000/XP互连的话,不要忘记在Windows 2000/XP的用户管理中打开GUEST账号。

剩下的任务就是共享上网了,Windows XP与Windows 2000一样也集成了网络共享的功能,使我们可以方便的共享上网资源而不必安装额外的网关或代理服务器软件。同样是在Network Connections窗口中,打开拨号上网(163)连接的属性对话框,点出Advanced(高级)页,在Internet Connection Sharing(Internet 连接共享)中选中Allow other network users to connect through this computer’s Internet connection(允许其它网络用户通过本机连接到Internet)。根据你的实际需要你还可以选中下面的两个选项,它们实现的功能分别是:1.当其它计算要通过本机上网,而本机未连接到Internet的情况下,是否要自动拨号?2.是否允许其它网络用户控制本机的Internet共享连接?

最后,在B、C两台计算机上把上网的方式改为通过局域网连接,并且在两台计算机上设置网关与DNS,把它们均设成192.168.0.1。

至此,我们的三机通过Windows XP的网桥互连的工作就全部完成了,三台计算机就像是通过HUB相连一样,可以互相访问,共享资源了。

当你想断开B、C之间的连接时,你可以直接在A计算机上将网关连接删除,由于我们在前面的操作中为每一块网卡分别设置了IP地址,所以A与B、A与C的连接仍然可以工作。要恢复B、C间的连接也很简单,只需重新建一下网桥,设置一下IP就可以了。

Windows XP不但支持三机互连,还可以把更多的机器连接在一起,操作与三机互连也是完全一致的。当然如果机器超过4台时,这个方法就不实用了,与其多购买那么多的网卡(况且机器上的PCI插槽个数也是有限的),不如直接使用集线器或交换机了,还可以获得更好的网络性能。

要想获得有关这个网桥功能的更为详细的说明,你还可以自己参考一下Windows XP的联机帮助,里面详细介绍了网桥的使用和设置等多方面的问题。

走进Linux编程的大门

以我本人初学Linux编程的一点心得体会与大家分享。

发表于《电脑爱好者》2001年第5期。以我现在的眼光看,这篇文章可真是不值得一提!

====

随着Linux的不断普及,使用Linux的人也越来越多,其中不乏编程爱好者。但他们中间不少人刚学会了Linux的基本操作,对编程这一技术活还心存疑惑:在Linux中如何进行程序设计,用什么样的开发工具?本文就以我初学Linux编程的一点心得体会和大家共同探讨有关Linux编程的问题。

Linux作为一个免费的操作系统,其源码开放性已成为其最大的特点,我们可以方便的得到Linux系统及其应用软件的源代码,Linux编程也就是在这样的环境下进行的对程序的编写或修改的工作,学会了Linux编程,不但可以自己编写一些共享的小程序供大家使用,也可以对现有的软件进行一点修改,让它们更适合自己的口味。

Linux下编程的工具很多,不同版本的Linux也提供了不同的开发工具,常用的语言一般主要是C/C++,通常情况下Linux都提供了在控制台终端下的C语言编译程序GCC。我们只要建立一个C语言源程序文件,比如hello.c,然后在终端下运行:gcc hello.c,系统便会自动对程序进行编译,如果没有出错的话,在当前目录生成a.out文件,否则显示出错提示。生成a.out后,我们只需在其所在目录键入 ./a.out就可以运行这个程序。但是这样的文本命令方式的开发工作实在很不方便,所以现在不少版本的Linux都在X-Windows图形界面下为我们提供了集成开发环境,比如蓝点Linux环境下的KDevelop等等,这些集成环境不但为我们提供了一个良好的编程界面,也为编程工作提供了极大的使利。

首次运行KDevelop时,系统会自动运行KDevelop设置安装程序,这个程序将验证正常运行KDevelop所必的文件是否齐全,通过设置后,我们就可以开始使用它了。KDevelop为我们在Linux下展现了一个类似于Visual C++的集成开发环境(见图一)。在这个环境的左半边有CV、LFV、RFV等几个标签,分别表示了类列表、逻辑文件列表和实际文件列表,里面保含了整个工程的所有的类和文件的概貌。开发环境的右半边则是文档显示区,用于显示源程序或是帮助信息。

下面我们就一起来使用这个开发工具来开发两个小程序,试试走进Linux编程的感觉。

我们先来尝试用它来制作一个最简单最经典的“Hello World!”程序,它是在Linux的文本界面即终端中运行的,如同在初学C语言时开发的第一个程序–在DOS下运行的“Hello World!”一样。

先打开“项目”菜单,选择“新建…”,在弹出的Application Wizard中选择“终端程序-C程序”(如果您熟悉使用C++程序的话可在此选C++程序,不过后面的程序清单就得修改修了),并单击“下一步”(见图二)。在向导的第二页中输入项目的名称等信息,然后把“生成源文件和头文件”前的勾去掉(见图三)。如果不是这样做的话,Application Wizard会自动生成一些源代码,碰巧还正是我们要做的“Hello World”程序,但我们为了说明问题,就不图这个方便了,我们自己做。单击“生成”按钮,稍等一会儿,等屏幕出现READY后,单击“退出” 按钮,我们的项目便生成了。

接着,我们就得录入源程序了。选择文件菜单中的“新建”命令,新建一个“C/C++程序”(我们的例子是C程序),系统自动按照Application Wizard中选定的文件头模板生成了一个空文件,我们就将把下面的程序输入这个文件,输入时要注意大小写,C语言对字母大小写敏感的:

#include <stdio.h>
main()
{
printf("Hello World!/n");
}

学过C语言的朋友一定对这段代码感到很熟悉,这的确是一个经典的程序,几乎所有C语言的入门书上都有它。

然后,我们选择菜单或工具条中的“运行”命令,执行这个程序,经过一段时间的编译,程序运行结果就出现在终端中,输出了“Hello world!” 这句话。

别看这个程序很简单,但它确实是我们在Linux环境下做的第一个程序。Linux下的C和ANSI C是完全兼容的,对于学过C程序设计的朋友不能不说是个好消息。您是不是已经对Linux编程产生了很大的兴趣呢?

不过,这个程序实在太简单了,能不能做一个在X-Window下运行的图形程序呢?做这样的程序很困难吗?别急,跟我一起来试一试。

要编写图形程序,一个优秀的开发包是必不可少的。如同在VC++中的MFC类库,KDevelop为Linux下编程提供了功能强大的Qt库和KDE库,用它们都可以方便的编写X-Window下的 KDE图形界面程序。除此之外,KDevelop还提供了“对话框编辑器”等一系列实用的工具使开发图形程序变得更方便。

同上面一样,我们一起来开发一个X-Window下的图形版“Hello World”程序。我们选择使用比较简单的Qt库来写我们的程序,一起来体验一下这个强大而又易用的开发包。

第一步还是建立工程文件,方法和前面建立终端程序的工程文件类似,不同的是在Application Wizard的第一步中不再是选择“终端程序-C程序”,而是选择“Qt程序-普通”,同样的,为了说明问题,在Wizard的第二步中,我们也把“生成源文件和头文件”选择前的勾去掉, 我们自己来写程序。工程建好后,我们就可以写程序了,同上面一样,我们新建一个C/C++程序,并输入下面的源程序:

#include <qapplication.h>
#include <qpushbutton.h>
int main( int argc, char **argv )
{
QApplication a( argc, argv );
QPushButton hello( "Hello World!" );
hello.resize( 100, 30 );
a.setMainWidget( &hello );
hello.show();
return a.exec();
}

与前面的C程序相比,这个程序要复杂的多,不过不要紧,我们一行行进行分析。

程序前两行调用了两个头文件,其中qapplication.h是建立一个Qt程序所需的最基本的库,任何Qt程序都要用到它。由于我们打算用一个按钮来显示“Hello world!”的文字,所以还要包含qpushbutton.h这个头文件。

主程序第一句建立了一个名为a的Qt程序,并把命令行参数传递给它。第二行建立了一个名为hello的按钮,它的标题为“Hello World!”,这就实现了我们要在屏幕上显示“Hello world!”文字的愿望。第三行使用PushButton的resize方法改变了这个hello按钮的大小。第四行设置了a程序的主控件为这个hello按钮(Widget这个词可以翻译为控件)。由于在Qt库做程序时,新建控件默认是不显示的,所以在第五行要用show方法把hello按钮显示出来。程序最后一行返回了a程序的运行返回值。

这么一解释,这个程序也就显得不是很困难了。怎么样,与VC++中的MFC类库相比,Qt库有过之而无不及吧。

下面我们就可以运行程序了,单击工具栏上的“运行”按钮,通过编译就可以了。程序运行后,屏幕上将出现一个小窗口,里面一个“Hello World!”按钮,它占满了整个窗口(这是由于它是此程序的主控件的原因),并且这个窗口还可以移动、改变大小等等。不过这时“Hello World!”这个按钮还没有作用,点击它不会有任何效果。如何给Hello World编写一个事件响应的函数呢? 比如我们想让“Hello   World”按钮被点击后程序结束运行该如何做呢?

在Qt库中,消息的响应是通过connect函数实现的。所以,很简单的,我们只要在源程序中“a.setMainWidget(&hello)”前加上一行:

QObject::connect( &hello, SIGNAL(clicked()), &a, SLOT(quit()) );

就可以了。这一行的意思就是把hello按钮的clicked事件与a程序的quit()函数连接起来。

至此,相信您对Linux的编程已经有了一个感性的认识吧!是不是很有意思呢,经过一通时间的学习,您一定会喜欢上Linux编程的。

另外,KDevelop不但为我们提供了强大开发环境,还给我们提供了详实的文档资料,包括了“编程手册”、“KDE库”、“Qt库”等一系列的文档,“Qt库”文档中还包含了一个14步教程,从头讲述Qt程序设计方法,最后一讲与我们一起完成了一个完整的游戏程序,是Linux编程入门难得的好教材。以上这些资料,都是学习Linux程序设计必不可少的优秀的参考资料,大家应当尽量用好它们。

以上都是我初学Linux编程的一点心得和体会,拿出来和大家分享,有不当之处还请多指正。