如何在C语言中实现Unix编程?

经过五年专业Java(以及较less程度的Python)编程,并慢慢地感受到我的CS教育,我决定扩大自己的视野/对世界的一般用处,做一些对我来说更像(对我来说)我真的对机器有影响。 我select学习C和Unix编程,因为我觉得这是许多最有趣的问题。

我的最终目标是能够做到这一点专业,如果没有其他原因,而不是我必须每周花费40-50小时的工作支付账单的事实,所以它也可能是编码的types我想要好起来。 当然,你不会雇用你以前从来没有做过的事情,所以现在我正在自力更生。

为此,我从K&R开始,这是一个很好的资源,部分原因是每章都有练习。 之后,我进入了“ 计算机系统:程序员的视angular” ,接着是“Unix环境下高级编程”的十章。 当我完成这本书时,我将阅读Unixnetworking编程 。

我在史蒂文森的书中缺less的是缺乏编程问题; 他们主要loggingfunction并提供示例,下面还有一些结尾部分的问题。 我觉得我会从受到挑战的每个章节ala K&R的知识中受益更多。 我可以为每个函数编写一些testing程序,但是这是一个不太可取的方法,因为(1)我可能会比起来遇到一些外部挑战的动机更less,(2)我自然只会想到使用函数在我已经发生的方式。

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

也就是说,我可以接受各种各样的build议,因为有些事我可能还没有想到。

重塑许多核心的Unix工具。 其中大部分是(现在仍然是)用C语言编写的,所以它们是开始学习的好方法。 根据你的技能,挑选更难或更容易的实用程序来复制。

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

Google for CS操作系统课程,并在那里做项目。 许多学校都在公共网站上有这些项目,所以你可以得到你需要的一切。 这里是普渡大学的网站的链接。 给壳项目一个镜头,这是困难的,但真正的教育。

这里有几个讨论C / Unix编程书籍的stackoverflow贴子。 他们主张的声誉是对其他资源的广泛分析。

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

用C语言学习XLib或Win32 GUI编程可能不太有用,因为对于GUI编程来说几乎任何事情都比C好,而用另一种语言包装核心C引擎通常要容易得多 – 除非你真的关心速度。 作为一个起点,请专注于“系统”编程应用程序,这是您最可能从C获得真正里程的地方。了解Tcl或Python之类的脚本语言之一的C接口如何工作。

编写一些有点笨重的代码(比如挑选networking数据包或解释一个协议),或者使用套接字来编写服务器端的代码,将会使你正确使用C的核心竞争力。 如果你有一些WRS书籍,试着让pthreads工作(IIRC UNP2有一个关于pThreads的大部分)。 相比之下,写一些使用非阻塞I / O的东西。 这是C的主要工作,通过这样做,你将获得C的良好工作知识。 Troll通过RFC来获得networking协议的一些想法来实现。

  • 推进用户的Linux / Unix好书是什么?
  • 学习C超越K&R有什么好的资源
  • 学习C程序devise的资源
  • 什么是开始学习数据结构和algorithm的好方法?
  • algorithm在C.

你打开书籍build议? 虽然有点过时(“有点”也许是一个很大的轻描淡写),Maurice Bach的“Unix操作系统的devise”是一本很好的书。 它属于您书架上的K&R旁边。

你可以尝试通过软件工具 (Amazon)这本书中的所有例子。 其中大部分是相当行人(右alignment的文本,解除等),但它是一个很好的介绍unix的哲学和基本的C编程。

这很有趣。 我们知道Unix是使用C语言devise的,可能不难学习。 如果您使用的是Windows操作系统,则可以使用“Windows服务的Unix”应用程序来练习您的程序。 如果你使用的是unix,那么我们可以使用像vi这样的编辑器。

巩固你的学习实践的最好方法。 所以只要select一种你感兴趣的应用程序,并开始开发它(例如一个networkingcli /服务器简单的应用程序)。 尝试testing大部分的unix API(文件,套接字等),看看它是如何工作的。 例如,你可以通过创build自己的函数来获得一本unix编程书籍,遵循章节并且在应用程序上testing你读的所有东西。 这样,您就可以开始开发自己的函数库,以便在更多的项目中使用。

写一个networking服务器。

  • 使其成为multithreading。

  • 是否支持您开发的新脚本语言(PHP等)

  • 允许通过身份validation的用户上传。

  • 写一个你最喜欢的工具插件(即与SVN集成,以提供一个webview)。

我会高度推荐一件事。

尝试并重新编写所有常用的Linux命令行工具,如ls,mkdir,cd等

您将同时获得关于编程和Linux的许多知识。

从最简单的select命令,说“时间”,并一路工作到更复杂的。