① UNIX环境高级编程(第2版) UNIX网络编程(卷2):进程间通信(第2版)这两本书哪个好
我把三本都买了
环境高级编程:讲解unix api的,所以会涉及到其他两本的一些api,但讲解不多。
网络编程卷一:讲解套接字socket编程的,重点讲网络编程的方方面面,比如协议、服务器架构、io使用。
网络编程卷二:讲解进程间通信的,这是相对于卷一的,卷一是网络通信,而卷二是单台机子的进程、线程之间的通信。
=========================================================================
所以这三本都有不同侧重,我一般以卷一卷二为主,高级编程为辅,这三本都是工作后常用的资料书,建议备齐。
另外如有兴趣可以读该作者的另外3本书:tcp/ip协议详解卷一、二、三,尤其是卷一超级有用
② 《UNIX环境高级编程》这本书怎么看怎么学习
W.Richard Stevens 先生所着之书比较适合有经验的人进一步深入学习
W.Richard Stevens 先生所着的UNIX 环境高级编程、UNIX网络编程、TCP/IP详解是难得的入门好书,但这里的入门指得是研究生级别的入门。Stevens 先生所着之书多半是为了给研究生上课时用做教材,因此 Stevens 先生假设阅读这些书的人至少已经接受过了系统的计算机技术本科教育,已经拥有了比较系统的计算机相关基础理论知识。在书中 Stevens 先生假设读者拥有了最基础的操作系统理论,网络技术理论,以及UNIX理论和实践经验,并拥有数种业界常用的UNIX系统作为学习环境(在国外的大学里很容易获得),这样才能体会书中所述的细节。因此这些书刚接触时看似通俗易懂,但在阅读细节上却对读者要求甚高,如果没有足够的专业理论和系统饥野实践是很难真正读进去的。
所以,对于没有接受过系统的计算机专业教育的爱好者,或者主要以 linux 系统维护,或以linux 桌面应用为主的普通用户,Stevens 先生的书并不是很合适的阅读对象。
因此,就我个人的看法,掌握任何一种知识都是需要投入的。我们需要花费金钱去得知识来源(花钱买书,花钱上网,花钱培训),需要花费宝贵的时间去阅读(人生匆匆几十年,没多少时间可以给我们去浪费),需要花费精力去理解书中的内容(基础知识越扎实,理解所学内容越快,但累积基础同样需要大量时间和精力),需要找到合适的环境(光看不实践心里是不会有底的)去验证自己掌握的东西。因此,如果在决定投入之前,先要摸清楚自己到底想要达到什么样的目标,这个目标是否切合自己的实际(相信一个在流水线上辛苦劳作的普通工人,即使学会了计算机编程也是没有用武之地的,除非他有机会离开流水线)。自己是否有足够的资源承载自己的理想(如对于温饱问题尚未解决之人,要他花上千上万的钱去学MBA显然是不现实的)。
同时,任何一本书都会对读者提出一个基本的知识架构和程度上的要求,比方说即使是文学博士,让他去读高能物理学方面的书也会要他的命的。因此在选择所读之书前,先要对自己的实际能力做一次详细的评估,看自己目前到了哪种阶段,是否有能力带此去掌握自己想要掌握的东西。千万不要因为好高骛远而勉力为之。选择适合自己当前水平的书去阅读并理解,远好过拿着大师所着的神作干瞪眼。
如果主要希望掌握UNIX下的编程技术,尤其是网络编程技术的话,可以有两条路走:
1、以实际需要完善知识架构:为自己做一个项目,比方说自己写个简单的 Web 服务器,因为现在 Web 应用非常丰富,既有成熟的客户端如浏览器可以配合,又有足够全的文档如 RFC文档可供参考,再加上最基本的 socket 编程经验,就可以开始做自己的 Web 服务器。一步一步的为 Web 服务器添加流行的功能,如支持后台 FastCGI 接口,支持 WebDAV,支持流媒体等。在这个过程中不断地学习和掌握相关的理论知识,有时在发觉设计上的不足时甚至需要推翻全盘重新架构。当最终一个完全符合自己心意且足够实用的 Web 服务器做成时,就拥有了可以由自己支配和修改的服务器,同时也掌握了相关的专业理论。这种方式比较适合有一定专业基础的人使用。优点是直观,方向明确所以学习效率高。缺点是需求驱动,形成知识架构不容易完整。
2、系统掌握计算机专业理论:最好的书就是大学里的理论教科书,这些书不会去讲解过于具体的计算机应用,而是从概念开始讲起,力图使学习者获得一个完整的知识体系。只要以后碰到的工作和这个知识体系相关,自然就能很快学会。这种方式比较适合没有基础,或者希望深入学习的人使用蠢肢迅,优点是知识架构会逐渐趋于完整,理论功底扎实,后劲足。缺点是花费时间长,方向不明确所以学习效率低,初期会因缺少实践而进展缓慢。
③ 学习linux驱动开发需要先学习UNIX环境高级编程这本书吗
你连应用层都不懂就能搞底层吗?而且《UNIX环境高级编程》讲的不是真正意义上的应用层,它讲的是操作系统API,也就是系统调用,你去看看有哪个应用程序会直接使用系统调用的。
系统调用是比C标准库还底层的库,由操作系统直接提供,都是一些非常基础的功能。重要的是它讲述了大量的系统级编程的概念与方法,这些概念是在其他很多地方都通用的,甚至在windows下都是非常有意义的。
系统调用是内核与应用层的接口,把握住了这一层上可以写应用程序,下可以写内核模块,当然都需要深入学习。
《UNIX环境高级编程》是你学习操作系统非常好的方式(大学讲的“操作系统”完全就是扯蛋 ),多写几次fork,把内核代码中task_struct结构大概看一下,你就知道什么是进程了,还要去背那些过时的甚至是错误的概念?以后你再看内核方面的书你就会知道这些有多重要,事实上没有系统级编程的知识,你要直接看内核方面还是比较困难的(这些东西你终究还是要知道的)。
还是看你自己怎么看了,《UNIX环境高级编程》确实不讲述任何关于内核编程的东西。