学习Unix/Linux编程要学些什么

180 2024-03-11 02:45

一、学习Unix/Linux编程要学些什么

感觉这本书写的还是不错的,讲的Unix/Linux系统编程,主要是通过讲解Unix系统上的命令程序是如何实现的来分析了Unix系统的原理和系统编程。比如讲解了who,cp,ls,pwd等命令用Unix C语言应该怎么实现。通过这种讲解方式,不仅学会了Unix的系统编程,而且还弄懂了Unix操作系统的一些原理性的东西。感觉写的非常不错。

1。Unix/Linux 下基本的C语言编程,包括基本编辑工具的使用,vim,Emacs等任意一种,gcc,gdb等编译调试工具的使用,以及Unix系统下的基本命令的使用以及C语言基本语法。也就是要能够在Unix系统下能使用开发工具写出最基本的c语言程序。

2。

文件的读写(read,write,close以及文件描述符和文件属性的理解),目录的操作,以及对应于这些系统调用的c库函数。

3。设备的操控(在Unix中,设备是作为文件来操作的,提供了与文件一致的操作接口)。I/O重定向。

4。信号机制(signal)。

5。

进程的创建,执行

(fork,exec,exit,wait,pipe等),进程之间的通信(IPC:文件/命名管道/共享内存/Socket/信号量)

6。

线程的使用(pthread_create, pthread_join, pthread_mutex_lock, pthread_mutex_unlock, pthread_cond_wait, pthread_cond_signal)

7。

Socket网络编程

。(socket, bind, listen, accept, sendto, recvfrom),理解网络编程的模型。(同步与异步I/O)

对于这些知识,不仅仅是学会这些系统或者函数调用,跟重要的是理解其编程模型。然后就是结合实际需求,利用这些基本知识进行开发了。很多时候,解决实际问题的方法比这些东西更重要,但是,这些基本知识是你开发的必备知识。

最后,推荐想学习Unix或者Linux编程的一定要看看这本书。

二、如何理解《Unix 编程艺术》中所说,“提供机制,而不是策略”

前者是 Unix 创建进程的函数,后者是 Windows 的。

但是,机制和策略的界限并不是静止的。所以,Unix 还有另一个编程艺术:模块应该是可替换的。比如当年高度考虑策略灵活的 X,在今天的环境下(远程登陆已经被 VNC 等基于 pixel 的协议代替,显卡的加速能力提高)已经不适用。所以 X 被策略更少但是效率更高的模块替代。

三、《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、系统掌握计算机专业理论:最好的书就是大学里的理论教科书,这些书不会去讲解过于具体的计算机应用,而是从概念开始讲起,力图使学习者获得一个完整的知识体系。只要以后碰到的工作和这个知识体系相关,自然就能很快学会。这种方式比较适合没有基础,或者希望深入学习的人使用,优点是知识架构会逐渐趋于完整,理论功底扎实,后劲足。缺点是花费时间长,方向不明确所以学习效率低,初期会因缺少实践而进展缓慢。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片