1.问个无盘系统的问题?
2.cè¯è¨ç¨ä»ä¹è½¯ä»¶ç¼åï¼
3.学习C语言应该先学习哪些基础知识
问个无盘系统的问题?
无盘启动工作原理及其分类
总的来说,无盘工作站都是由网卡的启动芯片(Boot ROM)以不同的形式向服务器发出启动请求号,服务器收到后,根据不同的机制,向工作站发送启动数据,工作站下载完启动数据后,撑船源码系统控制权由Boot ROM转到内存中的某些特定区域,并引导操作系统。根据不同的启动机制,目录比较常用无盘工作站可分为RPL和PXE,而目前的Windows 终端从其原理来说,并不属于无盘工作站,它也可以用终端卡或硬盘引导系统,进入工作站操作系统后,再连接Windows 服务器,而这个连接程序与一般的应用软件并没有什么本质区别,我们把它归结到无盘网络的原因是:目前大多数的终端都是先通过RPL或PXE启动无盘到DOS或Windows3x,再从无盘站中连接,成为终端。
4.1.1 RPL启动工作原理
RPL为Remote Initial Program Load的缩写,启动过程分析如下:
客户机开机后,初始化网卡,网卡BootROM上固化的软件向网络广播一个FIND帧,即引导请求帧,该帧中包含有客户机的网卡ID号。
服务器端的远程启动服务接收到客户机广播的FIND 帧后,根据帧中所带的网卡ID号在远程启动数据库中查找相应的工作站记录,如果不存在这样一个记录,引导过程不能继续;如果此工作站记录已经存在,远程启动服务则发送一个FOUND 帧给客户机的RPLROM,FOUND帧中已包含了服务器的网卡ID。
当网络上有数台服务器在运行远程启动服务时,RPLROM有可能会接收到多个FOUND帧,但RPLROM只对它收到的第一个FOUND帧有反应,它将根据第一个FOUND帧中所带的服务器网卡ID号,返回一个SEND.FILE.REQUEST帧给对应的服务器。SEND.FILE.REQUEST帧是一个要求服务器发送文件的请求。
服务器端的远程启动服务在收到SEND.FILE.REQUEST帧后,将根据远程启动数据库中的工作站记录查找对应的启动块(BootBlock)——在实际配置时我们知道,它位于NETBEUI目录,名为DOSBB.CNF和WBB.CNF——用FILE.DAT.RESPONSE帧将启动块送回客户机端的RPLROM。
RPLROM在收齐所有的FILE.DAT.RESPONSE帧后,将执行点转向启动块的入口,启动工作站。工作站以Windows 实模式启动后,将创建一个RAM盘,并将Windows 实模式文件从远程启动服务器拷贝到RAM盘,加载Windows 实模式网络设备启动并建立一个到SBS服务器的连接。最后,连接到该客户机的计算机目录(Machine Directory)所在的服务器上,并根据计算机目录中的有关设置及数据完成Windows 启动过程。
4.1.2 PXE启动原理
PXE是RPL的升级品,它是Preboot Execution Environment的缩写。它们的不同之处在于RPL是静态路由,而PXE是动态路由。其通信协议采用TCP/IP,与Internet连接高效而可靠,PXE无盘工作站的启动过程分析如下:
¨ 客户端个人电脑开机后, 在 TCP/IP Bootrom 获得控制权之前先做自我测试。
¨ Bootprom 送出 BOOTP/DHCP 要求以取得 IP。
¨ 如果服务器收到个人电脑所送出的要求, 就会送回 BOOTP/DHCP 回应,内容包括
客户端的 IP 地址, 预设网关, 及开机影像文件。否则, 服务器会忽略这个要求。
¨ Bootprom 由 TFTP 通讯协议从服务器下载开机影像文件。
¨ 个人电脑通过这个开机影像文件开机, 这个开机文件可以只是单纯的开机程式也可
以是操作系统。
¨ 开机影像文件将包含 kernel loader 及压缩过的 kernel, 此 kernel 将支持NTFS root
系统。
¨ 远程客户端根据下载的棋牌源码app搭建文件启动机器。
4.1.3 Windows 终端(WBT)的特点及纯软件终端启动原理
WBT(Windows Based Termintal)是Windows Server/Advanced Server推出的一项标准服务,它允许用户以Windows界面的客户端访问服务器,运行服务器中的应用程序,使用户就像用自己的计算机一样。在WBT的网络中,所有应用软件的安装、配置、运行和存储等均在服务器上进行,客户机(终端)只作为输入输出设备。当终端用户登录到服务器后,就可以像使用本地资源一样使用服务器上的资源,运行服务器上Windows应用程序。多个终端用户可以同时登录到服务器上,互不影响地工作。这样的网络十分容易进行集中管理,很适合学校和中小企业的局域网构建。WBT的这一特点跟早期的UNIX的字符终端类似,但WBT的优势在于它是基于Windows的,具有友好的图形界面和Windows的易用性。另外,在WBT的网络环境下,网络传输的数据主要是键盘和鼠标的输入信息与显示器的输出信息,数据的处理都在服务器上进行,这就大大减少了网络的传输量。
此方案中将原本要淘汰的、计算机作为终端使用,有利于资源的再利用;同时,安装软件及运算等都在服务器上进行,一般情况只需维护一台服务器就行,对于软件及防病毒的管理也降低了,所以利用该方案大大降低了总体拥有成本,节省了大量的资金。它有以下一些特点:
¨ 运算、存储都在服务器内进行,安装软件只需安装在服务器上一份,所有终端就都可以使用;所有终端用户的文件都各自独立地存放在服务器上,即使掉电,也不会造成资料丢失;
¨ 机房维护由维护每一台PC,转变为维护一台服务器,维护成本大大降低;总拥有成本(TCO)大大降低;
¨ Windows 服务器版本是最新的服务器操作系统,性能非常稳定,整个系统的稳定性得到可靠保障;
¨ Windows 终端的界面是标准的 Windows风格界面,使用最新的Windows 的界面,用户非常熟悉,无需特殊培训;
¨ 能满足对因特网的需求;应用当今流行软件时单机反映速度快;使用 Windows终端与使用PC完全相同,所以在 Windows终端上的学习经验,可以应用到PC上;
¨ 管理和控制性强:终端服务器能够对终端进行管理,设定终端机运行的软件,同时能对终端机进行随时监控。
纯软件终端的启动原理:它的启动原理前一部分与RPL或PXE无盘启动原理完全相同,这里就不再详述了,后一部分的连接是基于Windows 多用户、多任务的基础上的终端服务,在工作站上安装由微软提供的位的连接程序,或由第三方的提供的位或位在DOS、Windows 3x或Windows 9x无盘站安装连接程序,并设置好连接属性,然后在启动无盘站时将其连接命令加到DOS站的开机批处理,或加到无盘Windows 的启动组,使其自动连接Windows 服务器。在终端安装Windows CE,服务器端安装Windows 专业版,终端启动以后透过RDP协议运行服务器端的应用程序,服务器端进行应用程序运算后同样透过RDP协议将结果在终端显示。汽车开源源码
4.2 无盘网络的历史及发展
最早使用的无盘网络,应该是UNIX的字符终端,本书所指无盘网络是广义上的定义,也是就是说只客户机上无软硬盘,我们就称为无盘网络。
从年至年,绝大多数无盘网络基本构架都是采用Novell Netware 3.或Novell Netware 3.作服务器的操作平台,工作站以IPX方式登录。当时我们称它为IPX无盘网络,主要是用于教学网络,应用程序主要以DOS为主。
从年至年,以RPL方式登录的无盘网络占绝大多数,服务器端可以选择Novell Netware 4.1或Windows NT 4.0 Server,在此期间,由于微软的大力支持,在它的Windows 产品系列中,推出了网络版的Windows 即所谓的完全版,它包含了网络安装命令Netsetup,之后的几年RPL几乎成为了无盘网络的代名词,年微软推出的Windows ,没过多久,又推出了Windows 第二版,其内核较Windows有较大变化,与Internet联系更加紧密,功能也有所增强,遗憾的是Windows不再提供Netsetup命令,也就是说Windows无法安装在无盘站上,尽管众多的爱好者不断的努力,无盘仍然不能,期间,也有人声称成功安装无盘Windows ,其实,只是改头换面的Windows ,其内核仍然是Windows ,我们把它称之为伪Windows 。
自年至今的一年多来,由于Inter、3COM和QUALSTEM等大公司的界入,使无盘技术得到了飞速的发展,大量高质量的无盘支持软件不断出现,例如Inter PXE PDK、3COM DABS、3COM虚拟硬盘和QUALSTEM的Litenet。与之相对应的无盘方案也层出不穷,令人目不暇接,无盘站不能运行Windows 已成为过去,新的无盘启动机制反过来被用到了RPL中,使得RPL工作站上也可以运行Windows 了。与此同时,微软公司在其划时代的产品Windows中将终端技术收为标准组件,加上第三方软件Mateframe对终端的支持,使其可以在无盘DOS或无盘Windows3x下连接Windows Server而形成所谓的纯软件Windows 终端。目前在无盘技术方面有三个主流即:RPL无盘Windows、PXE 无盘Windows 系统和纯软件的Windows 终端。可以看出在无盘组网方面用户有了更多的选择,而且无盘技术的应用领域更广,几乎所有有盘站能运行的软件在无盘站都能运行。
4.3 三种主流无盘网络的对比
面对各种无盘解决方案读者可能无可适从,本节将对PXE、 RPL、Windows 自带的终端(下面称为标准WBT) 与基于MetaFrame的终端(下面称为Meta WBT)之间的区别作一详细的介绍。我们把标准WBT和Meta WBT合称为终端。
标准WBT名气最大,是组态软件源码net软件巨人微软推出,捆绑在Windows 里面。它也是微软针对嵌入式产品推出的重量级产品,微软希望籍此在嵌入式产品市场中抢得垄断地位。
标准WBT的优点是对终端的硬件要求不高,只须运行Windows CE以及处理一些简单I/O动作。不须对现有终端作更多改造升级或再投资,通常机器即可满足要求,无须硬盘,在网卡的bootrom中增加Windows CE或PCI槽中插一片带Windows CE的DOS即可,终端的其它方面无须改动,保护现有投资。缺点:对服务器硬件要求高,因为所有的终端运行的应用程序都在服务器上运行,CPU及内存资源消耗相当大。同时,由于Windows CE本身受限的缺陷,即“客户机过瘦”,对各种外设的支持不足,相应的驱动程序较难找到,多媒体方面的性能较弱。大型软件的运行速度较慢。由于微软的惯例,客户端只限于Windows CE设备,服务器须是Windows 服务器,从而大大限制了它的应用场合。
MetaFrame国内较少见,大家较为陌生,是美国Citrix公司开发,支持位,位Windows PC,Windows终端,网络电脑,Windows CE设备,及范围很广的非Windows终端,web 浏览器等。服务器端是MetaFrame Server,其实质是用Windows Server上装有MetaFrame服务端程序。服务器可以采用多个服务器群集的方式,但须指定一个主服务器(Master metal frame Server)由于客户端程序可以跨平台工作,所以在未来ASP中竞争更强。工作方式也与标准WBT极为相似,客户端须自举启动(不一定选择Windows CE,可以用其它OS,包括DOS、UNIX等),然后可以透过ICA协议在服务器执行应用程序,服务器端也通过ICA传输用户界面,包括运行结果。服务器可以置在远端,然后终端通过ISDN,MODEN拨号,局域网,甚至无线传输等方式,以ICA协议与远端的服务器通信。这与标准WBT相比有着很大的优势,意味着ASP供应商可以透过Intenet提供应用服务。MetaFrame还有一个工具很诱人,管理员可以远程操控客户端界面,控制客户端的键盘,鼠标以及输出界面。MetaFrame 的缺点与标准WBT一样,对服务器硬件资源要求较高。 实质上,MetaFrame与 WBT的spdif源码支持7.1核心技术是将用户界面程序与逻辑运行程序剥离,逻辑运行程序在服务器端运行,用户界面程序通过ICA或RDP协议传输到客户端,同时ICA或RDP将用户交互响应的信息(如键盘,鼠标操作等)送回至逻辑运行程序处理。但客户端系统的自举还须靠本地原有的OS如Windows CE等完成,故严格而言,并不算是远程启动技术。
PXE是真正意义上的远程启动技术。PXE是Intel公司开发,虽然推出时间不短,但真正有价值的应用却是今年内才体现。据网站记载,国内DTK公司,长城电脑都已成功在Intel PXE技术上研发Windows 无盘工作站,并在教育系统中大力推广。 工作站具有一个带有Intel PXE bootrom的网卡或集成到BIOS的英特尔PXE代码。当一个终端启动后,服务器的操作系统(OS)将被加载至其内存中。在远程启动软件外接附件的帮助下,服务器操作系统远程启动服务可以支持学生站运行Windows 和Windows 。当终端启动时,PXE代码将从服务器检索启动和配置软件,这一过程就是远程启动。
与终端技术不同的是,PXE运行应用程序用到的是本地的资源,及内存,只是相当于硬盘由网络代替了,服务器的负荷也大为减少,配置要求相对较低,这是比WBT先进的一大优点。由于工作站上运行的是真正的Windows ,所以支持的应用软件十分丰富。工作站加上硬盘后就变成一个标准的PC机,可以在其它场合应用,从而保护了客户的投资。可惜的是,PXE现在还不支持拨号,ISDN等方式,因而不能透过Internet实现远程启动,因此作为ASP工具不太合适。但如果应用于电子教室,办公室,酒店,网吧,证券等场合则相当具有竞争力。在速度方面,与终端不相上下,但在多媒体方面,PXE占优势。
综上所述,三者各具优势,用户可根据自身的需求选择适当的技术和产品。一般而言,若ASP,远程教育选择Metal frame最为合适,局域网场合选用PXE较为合适,而PDA,手持设备等则选Windows CE为佳。
PXE与RPL在运行应用程序所使用的资源除硬盘外,都是本地的资源,从其运行模式来看两者有很多相似之处,但内核是截然不同的,以下从几个方面进行比较:
¨ 发展前景
PXE:Intel新推出的软件,从理论上来讲应该是很先进的,尽管还存在一些问题,但其优越的一面已经在应用中得到了充分的体现,而且Intel公司还将继续提供这方面的支持,并且公开源码,相信以后会更加改进。
RPL:Microsoft产品,已经很成熟了,而且许多爱好者都比较熟,技术资料到处都是,但Microsoft已经放弃了此产品开发与支持,不会再有更新的升级产品了。
¨ 工作站启动速度
从少量机器来看,PXE与RPL似乎没有太多的区别,但如果机器数量较多,PXE会快一些,其原因主要是RPL采用NETBEUI通信协议,若传送过程中有错误帧,RPL会要求整个数据包重发,而PXE采用基于TCP/IP的MTFTP(多点传送)的通信协议,若在传送过程中有错误帧,PXE并不是将整个数据包重发,只是将某一出错线程的数据重发,这样使整个网络的启动的速度加快。在工作站较多的情况下,出错的概率较高,因此在这种情况下启动速度的差别较大。
¨ 安装方面
PXE安装是基于本地上传的,也就是说,只要在一个工作站上安装好一台有盘工作站,然后通过上传软件,将整个硬盘上传服务器的一个共享目录下,安装步骤比较少,整个过程也很简单,安装成功率很高。传统方式下的RPL Windows 无盘站的安装过程十分繁琐,且很容易出错,安装成功率很低。目前的RPL技术吸取了PXE的本地上传方式,使安装的方法接近PXE的安装,但需掌握RPL和PXE两项技术才能进行安装。当然目前出现的许多RPL的安装工具,给安装无盘RPL Windows 带来方便。
¨ 运行速度
PXE要快一些,特别是在运行一些大的应用软件或上网时更加明显,主要原因是由于PXE的默认协议为TCP/IP。而在低配置无盘网络中,RPL无盘Windows 要快一些。
¨ 日后维护方面
PXE和改良的RPL在日后的维护方面十分方便,软件的维护量极低,所需的维护只是升级应用软件,删除客户机无用文件。若一段时间不用应用程序,且硬盘作好磁盘配额,那么在这段时间内可以作到软件零维护,对机房管理人员来说可以说是一个解放。传统的RPL网络的维护量极大,客户机可以轻意的破坏系统,虽然可以通过各种手段加以限制,但无法从根本上解决,而且由于各种限制的存在使Windows 界面面目全非。
¨ 硬件兼容性
PXE软件可以大多数的网卡和主板,但PXE的启动芯片支持的网卡并不多,对主板的BIOS要求为AWORD的,其它的BIOS版本则有不兼容的现象,这是目前制约PXE发展的重要因素。RPL的硬件兼容性则很好几乎所有的网卡和主板都能支持。
三种主流无盘网络系统(四种方案)对比如表4.1所示。
表4.1 四种无盘启动技术的比较表
PXE
RPL
标准WBT
Mate WBT
服务器操
作平台
Windows NT 4.0 Server
Windows Server
Windows Advance Server
Novell Netware 3xx
Windows NT 4.0 Server
Windows Server
Windows Advance Server
Windows Server
Windows advance Server
显示服务协议
由本机设备处理
由本机设备处理
RDP协议,仅支持在TCP/IP环境下运行的wan,lan或远程访问网络。仅适用宽带企业网
ICA网络协议,适用于宽带网及窄带网,并支持屏蔽技术,管理员可远程操纵瘦客户端设备
客户端支持
无盘DOS工作站
无盘Windows 工作站
无盘Windows 工作站
无盘DOS工作站
无盘Windows工作站
无盘Windows工作站
Windowsce设备,包括Windows终端
超过个客户终端,支持位,位Windows终端,网络电脑,Windows ce设备,及范围很广的非windows终端,web 浏览器
服务器的要求
较低
最低
高
高
工作站的要求
最高
较高
较低
低
应用场合
新建机房,无盘网吧
教学网络,游戏网等
配置较差的无盘网络
教学网络、游戏网
Windows9x 网络,企业内部网资源共享 手持设备
配置很差的、机房改造,主要用于教学网
cè¯è¨ç¨ä»ä¹è½¯ä»¶ç¼åï¼
å¦cè¯è¨å¯ä»¥ç¨ç软件æ¨èå¦ä¸ï¼
1ãTurboCæ¯ç±ç¾å½Borlandå ¬å¸å¼åçä¸å¥Cè¯è¨ç¨åºå¼åå·¥å ·ï¼Borlandå ¬å¸æ¯ä¸å®¶ä¸é¨ä»äºè½¯ä»¶å¼åãç å¶çå¤§å ¬å¸ãè¯¥å ¬å¸ç¸ç»§æ¨åºäºä¸å¥Turboç³»å软件ï¼å¦TurboBASICãTurboPascalãTurboPrologï¼è¿äºè½¯ä»¶å¾åç¨æ·æ¬¢è¿ãTurboCéæäºç¨åºç¼è¾ãè°è¯ãé¾æ¥çå¤ç§åè½ã
2ãWIN-TCæ¯ä¸ä¸ªTC2WINDOWSå¹³å°å¼åå·¥å ·ã该软件使ç¨TC2为å æ ¸ï¼æä¾WINDOWSå¹³å°çå¼åçé¢ï¼å æ¤ä¹å°±æ¯æWINDOWSå¹³å°ä¸çåè½ï¼ä¾å¦åªåãå¤å¶ãç²è´´åæ¥æ¾æ¿æ¢çã
学习C语言应该先学习哪些基础知识
程序员之路——如何学习C语言
学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文的主题。请注意,即使是“最小的代价”,也绝不是什么捷径,而是以最短的时间取得最多的收获,同时也意味着你需要经历艰苦的过程。
一、要读就读好书,否则不如不读
所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。
大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过万,据我所知,很多学校都会推荐这本书作为C语言课本。虽然本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚定地黑他这本书的。这本书不是写给计算机专业的学生的,而是给那些需要考计算机等级考试的其它专业学生看的。这本书的主要缺点是:例子程序非常不专业,不能教给你程序设计应该掌握的思考方式;程序风格相当地不好,会让你养成乱写代码的恶习;错误太多,曾经有人指出过这本书的上百个错误,其中不乏关键的概念性错误。好了,这本书我也不想说太多了,有兴趣大家可以百度一下:)
Kernighan和Ritchie的《The C Programming Language》(中译名《C程序设计语言》)堪称经典中的经典,不过旧版的很多内容都已过时,和现在的标准C语言相去甚远,大家一定要看最新的版本,否则不如不看。另外,即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言参考手册》是十分必要的。《C语言参考手册》就是《C Reference Manual》,是C语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的《C程序设计语言》是根据C标准修订的,而《C语言参考手册》描述的是C标准,二者可能会有些出入,建议按照C标准学习。还有一本《C和指针》,写得也是相当地不错,英文名是《Pointers on C》,特别地强调指针的重要性,算是本书的一个特点吧。不过这本书并不十分适合初学者,如果你曾经学过C语言,有那么一些C语言的基础但又不是很扎实,那么你可以尝试一下这本书。我相信,只要你理解了指针,C语言便不再神秘。
如果你已经啃完了一本C语言教材,想要更进一步,那么有两本书你一定要看。首先是《C Traps and Pitfalls》(中译名《C陷井与缺陷》),很薄的一本小册子,内容非常非常地有趣。要注意一点,这本书是二十多年前写成的,里面提到的很多C语言的缺陷都已被改进,不过能够了解一些历史也不是什么坏事。然后你可以挑战一下《Expert C Programming》(中译名《C专家编程》),书如其名,这本书颇具难度,一旦你仔细读完并能透彻理解,你便可以放心大胆地在简历上写“精通C语言”了。
切记一个原则,不要读自己目前还看不懂的书,那是浪费生命。如果你看不懂,那你一定是缺失了某些必需基础知识。此时,你要仔细分析自己需要补充哪些内容,然后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。
二、Unix/Linux还是Windows,这是个很大的问题
不同的编程环境会造就出不同思维的程序员。Windows的程序员大多依赖集成开发环境,比如Visual Studio,而Unix程序员更加钟爱Makefile与控制台。显而易见,集成开发环境更容易上手,在Windows上学习C语言,只需要会按几个基本的Visutal C++工具栏按钮就可以开始写Hello, World!了,而在Unix下,你需要一些控制台操作的基本知识。有人也许认为Unix的环境更简洁,但习惯的力量是很大的,大家都很熟悉Windows的基本操作,而为了学习C语言去专门装一个Unix系统,似乎有点不划算。
对于一个只懂得Windows基本操作、连DOS是什么都不知道的新手而言,尽快做一些有趣而有意义的事情才是最重要的。用C语言写一个小程序远比学习ls、cat等命令有趣,况且我们要专注于C语言本身,就不得不暂时忽略一些东西,比如编译链接的过程、Makefile的写法等等等等。
所以我建议初学者应该以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作为主要的学习环境,而且千万不要在IDE的使用技巧上过多纠缠,因为今后你一定要转向Unix环境的。Visual C++ 6.0使用很方便,调试也很直观,但其默认的编译器对C标准的支持并不好,而Dev C++使用gcc编译器,对C的标准都支持良好。使用顺带提一下,很多大学的C语言课程还在使用Turbo C 2.0作为实验环境,这是相当不可取的,原因其一是TC 2.0对C标准几乎没有支持,其二是TC 2.0编译得到的程序是位的,这对今后理解位的程序会造成极大的困扰(当然,用djgpp之类的东西可以使TC 2.0编译出位程序,不过那过于复杂了)。
等你学完一本C语言的教材,你一定要转向Unix平台继续学习,几乎所有的C语言高级教程都是基于Unix平台的(比如《C专家编程》)。转变的过程是痛苦的,你需要面对的是各种纷繁复杂的命令,完全不同于Windows平台的思考方式,但是这种痛苦是值得的。Unix与C是共生的,Unix的思考方式和习惯更加符合C语言的思考方式和习惯。在Unix下,你可以找到无数优秀的源代码供你尽情阅读,你可以方便地查看某个库函数的联机手册,还可以看到最优秀的代码风格
归结起来就是一句话:初学C语言,建议使用Windows系统和集成开发环境,在准备向“高手”方向努力时,请先转向Unix平台。
三、万事俱备,你就是东风
书已选定,环境配置完成,正所谓万事俱备,只欠你自己的努力了。请从书的前言开始,仔细地阅读手头的教材,很多人看书喜欢直接从第一章开始看,这是错误的做法。前言是作者对整本书的大体介绍,作者一般会告诉你需要什么基础才能够顺利阅读本书,这可以帮助你检验自己的基础知识是否已经具备。看完前言,还要浏览一下目录,了解一下书的整体结构,顺便给自己安排一下学习计划。
学习C语言,必需注意每一个细节,书上的例子代码一定要自己亲自敲一遍,编译执行输出都跟书上说的一致才能算是学完了一个例子,如果不一致,就要仔细找原因。出了书本上有的例子,自己还要“创造”一些例子,比如学习运算符优先级的时候,可以写几个相同的表达式,在不同的位置加上括号,看看有哪些不同的行为,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的书上的例子以及改造之后的例子,还有自己“创造”的例子,都应该仔细地归类保存,并且要在源代码中写上简短的注释,阐述这个例子的意图。
例子之后就是习题了,我建议初学者把所有的习题都独立做一遍,然后对照答案的代码,看看自己的代码有那些不足,再试着修改自己的代码。很多人不重视习题,这是极大的错误,因为作者通常会在习题中说明一些重要的道理,而不是单纯地检验前面的知识。
也许你认为这样学习太慢,其实不然。学得细致就不用走回头路,等你学到后面才发现自己前面没搞清楚,那才是真的得不偿失。一般说来,整本书读完,你应该完成数千行乃至上万行的代码,无论是原封不动照抄书上的,还是自己心血来潮写就的,都是今后继续学习的一笔财富。以我自己举例,阅读《Windows核心编程》时(我只阅读了3/4的内容),除了抄书上的代码,还自己写了很多例子,一共有行(用unix下的wc工具统计),时隔多日,我早已记不清Windows的系统编程了,但只要花几分钟翻出以前的代码看看,便会重新了然于胸。所谓好记性不如烂笔头,就是这个道理。
仔细读书、认真抄写源代码、独立完成习题外加更进一步的实验,最后将所有的代码留下,成为自己的经验和财富,绝对的辛苦,也绝对的事半功倍。当然,这种方式只适合学习需要精通的技术,如果不是学习C语言,你还要具体情况具体分析。
写到最后,还有非常非常重要的一点没有提及——代码风格,从最开始学习就必须强迫自己模仿最优秀的代码风格