我如何在C中练习Unix编程?

dan*_*ben 48 c unix

经过五年的专业Java(以及在较小程度上,Python)编程并慢慢感觉我的计算机科学教育失控,我决定我想开阔我的视野/对世界的一般用处并做一些感觉更多(对我而言)就像我真的对机器有影响力.我选择学习C和Unix编程,因为我觉得这是许多最有趣的问题.

我的最终目标是能够以专业的方式做到这一点,如果没有其他原因,我必须每周花费40-50小时来支付账单的工作,所以它也可能是我编码的类型想要变得更好.当然,你没有被聘用去做你以前没做过的事情,所以现在我正在逐步加强.

为此,我从K&R开始,这是一个很好的资源,部分原因是每章都有练习.之后我转到了计算机系统:程序员的视角,然后是Unix环境中高级编程十章.完成本书后,我将阅读Unix网络编程.

史蒂文斯的书中我缺少的是缺乏编程问题; 它们主要记录功能并提供示例,以及一些章后问题.我觉得,通过挑战每一章a K&R中的知识,我会受益更多.我可以为每个函数编写一些测试程序,但这是一个不太理想的方法,因为(1)我可能没有比上升到一些外部挑战更少的动机,并且(2)我自然只会想到使用该函数以我已经发生过的方式.

所以,我想就如何练习提出一些建议.显然,我的第一选择是找到一些有Unix编程挑战的资源.我也考虑过寻找并尝试为一些开源C项目做出贡献,但这有点令人生畏,因为学习使用该软件会有一些开销,然后学习代码库.我能想到的唯一一个我经常使用的开源C项目是Python,我不确定开始这么容易.

也就是说,我对各种建议持开放态度,因为有些事情我甚至都没有想过.

sam*_*moz 28

重塑许多核心Unix实用程序.其中大部分是(现在仍然是)用C语言编写的,因此它们是开始学习的好方法.根据您的技能,选择更难或更容易的实用程序进行复制.

尝试编写自己的malloc.你将学到很多关于Unix和很多C编程的知识.

谷歌为计算机科学操作系统课程并在那里做项目.许多学校在公共网站上都有这些项目,因此您可以获得所需的一切.是Purdue网站的链接.给shell项目一个机会; 这很难,但真的很有教育意义.

  • 我刚开始时最喜欢的一个项目是重新实现`tar`.令人惊讶的是,C编程的许多不同领域都是如此. (2认同)

Con*_*lls 5

以下是一些讨论C/Unix编程书籍的stackoverflow帖子.他们声名鹊起的主要原因是对其他资源的广泛欢迎.

练习一些习语(理解指针的来龙去脉等)并挑选有助于此的项目.列表中的第三个项目有一个答案(免责声明,我写了它)与一堆高级C语言,其中一个惯用的C程序与Java不同.

使用C学习XLib或Win32 GUI编程可能没那么有用,因为几乎任何事情都比C编程更好用于GUI编程,并且用另一种语言包装核心C引擎通常要容易得多 - 除非你真的关心速度.作为一个起点,专注于"系统"编程应用程序,这是您最有可能从C获得真正的里程数.了解如何使用Tcl或Python等脚本语言之一的C接口.

编写一些bit-twiddly和指针繁重的代码(例如,分离网络数据包或解释协议),或使用套接字的服务器端项目将使您直接进入C的核心竞争力.如果您有一些WRS书籍,请尝试使用pthreads(IIRC UNP2有一个关于pThreads的重要部分).对比一下,写一些使用非阻塞I/O的东西.这个东西是C的主场,你可以通过这样做获得C的良好工作知识.Troll通过RFC来实现网络协议的一些想法.