Linux内核(或其他低级别的东西)是如何编写C的“好”示例

时间:2009-01-14 00:51:02

标签: c linux-kernel

遵循“C的最佳用途”问题。

Linux内核似乎是一个着名且非常好的C程序。但它是主流“最佳实践”C的一个很好的例子吗?

9 个答案:

答案 0 :(得分:18)

我已准备好为此而努力,但Linux内核是一个失控的学生项目。更严重的是,从编程的角度来看,Linux内核做得很好的是制定了一套非常严格的设计和编码指南,这使得很多人可以在仍然拥有所有东西的同时做出贡献。

我信任的人将操作系统作为他们生活中的工作告诉我,BSD内核是一个很好的C编程和良好操作系统设计的很多更好的例子。我对伯克利的教授们了解得很多,我对此声称并不感到惊讶。

更广泛地说,操作系统内核是高度专业化的东西 - 关于内核没有任何主流。如果你想要好的C练习的例子,你可以在The Practice of Programming上尝试Kernighan和Pike的书。或者,如果你想研究一个真实的系统,那么implementation of Lua足够小,你可以读取它,设计得非常好,并且令人难以置信的可移植 - 可以在ANSI的任何平台上运行C编译器。

主观和议论性答复道歉:(

答案 1 :(得分:16)

你的好榜样是什么意思?我相信Linux内核是一个写得很好的内核,有一些问题,其中很多都在被清理。但是,就使用它作为如何编写通用C代码的示例而言,我认为它并不合适。阅读和理解内核会教你很多关于C.但你在内核中找不到的任何库都可以。标准库不可用。因此,例如,您将看到“printk”而不是“printf”等等。还有一些黑暗魔法。内核是一个非常特殊的情况。如果您正在编写一些常规应用程序(如文件管理器或数据库),我不会用它来查找最佳实践。

答案 2 :(得分:9)

是的,是的。

如果您不想对内核的详细信息感到不知所措,可以从使用C编写的一些Linux实用程序函数开始。有关如何获取源代码的详细信息,请参阅this question的答案

另一个阅读C源代码的好地方是C自己的Standard Library

最后,我听到的最新C项目是Git

答案 3 :(得分:3)

我建议查看gnu实用程序(例如标准unix实用程序的源代码,例如'ls'和'awk'),因为它们将更容易理解,更有可能以更干净的方式编写方式(内核与其他类型的软件有不同的性能需求和兼容性问题)。

答案 4 :(得分:2)

对于主流节目? No. * nix内核代码通常不在userland中,因此与大多数“主流”编程有不同的约定和要求。但是,它是您可以学习的一些最好和最高质量的C代码。它有它的弱点,而且它写得不是很完美,但在很大程度上它是非常有效,干净的代码。

答案 5 :(得分:1)

如果你从学习C的角度提问,那么一开始就可能过于庞大。就C的使用而言,它最适合需要便携性和性能的应用。它通常用于系统级编程。但是,它是以牺牲抽象为代价的。因此,您必须自己进行大量编码,而不像Java或甚至C ++这样的语言。理想情况下,您的应用程序类型应决定语言的选择,并且使用操作系统C是可行的方法。

了解Linux内核的一种方法是从一个非常老的Linux内核版本开始。这将包含肉并隐藏当前内核中存在的额外复杂性。这应该足以理解基础知识。

答案 6 :(得分:1)

这是否是“最佳实践”取决于您的要求。在Windows平台上也有许多低级C程序,但是如果你看一下它们(例如,WINDDK的设备驱动程序示例),你就会发现微软已成功发明另一种语言他们称之为C :-)但是,如果您想在Windows上开发设备驱动程序,那些应该被视为“最佳实践”。

答案 7 :(得分:0)

一个很好的地方是查看一些正在使用的开源编译器的代码。您需要出色的数据结构和指针技能来编写编译器。

答案 8 :(得分:0)

我发现内核是如何编写模块化代码的一个很好的例子。尽管是C,但它有点面向对象。