Linux系统编程

7
我想学习Linux系统编程,并想知道如何入手和从哪里开始。我有Web开发背景(Python,PHP),也了解一些C和C ++。
基本上,我想知道:
1. 要学习和追求哪种语言(我认为主要是C和C ++)? 2. 如何/在哪里学习这些特定于系统编程的语言?书籍、网站、博客、教程等。 3. 有没有其他好的地方可以从基础开始学习? 4. 有哪些好的库可以开始使用? 5. 我需要什么样的环境设置(或近似值)?假设必须有Linux,但我有一个很少使用GUI登录的Linux框,总是使用SSH。GUI是否更有帮助,或者VI编辑器就足够了?(如果此部分的问题应该转到serverfault.com,请告诉我)
PS:澄清一下,通过系统编程我指的是编写设备驱动程序、系统工具、编写不在Linux平台上但在其他平台上存在的原生应用程序,以及与Linux内核交互等。

2
这可能与此相关,但如果你真的想跟上未来的步伐,学习Go语言吧。 - user132014
@Tom:Go语言支持多核编程吗?我在想,既然现在的处理器都有多个核心,我们能否通过利用这些核心来提高性能呢? - user201788
1
是的,Go语言具有称为goroutines的本地并发构造。 - Matthew Flaschen
5个回答

6

如果您要涉及内核,必须使用C语言。有一些书籍,如Essential Linux Device Drivers,可以为您提供结构基础、代码运行位置等基本知识。

通常情况下,许多服务器都是用C语言编写的,有时也会用C ++。流行的库包括Glib、libevent、boost(适用于C ++)。

您可以在所选编辑器的命令行中执行所有操作 - 在这里没有明显的优胜者,请选择自己喜欢的。


所以,基本上不需要像Eclipse这样的IDE吗? - user201788
绝对不会,大多数内核开发人员都不会接近Eclipse。 - Yann Ramin
1
+1 来自一位内核黑客,他还没有找到我没有遇到过的 IDE。 - Tim Post
@Tim,您能详细介绍一下您的环境是什么样子的,或者您如何进行内核编程吗?我想开始学习,但不知道从哪里开始。 - user201788
1
我猜他使用平铺式窗口管理器+vim。 有用的工具包括grep,gcc,gdb和cscope。 - Thomas M. DuBuisson

3

如果您想深入了解Linux系统编程,我建议学习C语言和x86汇编语言。

对于应用程序而言,Linux支持多种编程语言,例如Python、C++、Fortran、Perl等,您可以选择自己熟悉的语言进行开发。


3
你的问题比较宽泛。"在Linux上不存在的本地应用程序"包括一些我不认为是系统编程的办公套件。我建议你一次只关注一件事情(比如设备驱动程序)。已经有很多关于这个问题的现有问题,包括Linux编程书哪个IDE适合Linux内核驱动程序开发有没有推荐的GNU / Linux驱动程序编写教程?Ubuntu Linux,我应该学习哪些编程语言?
要学习C89,我绝对会深入研究The C Programming Language(第二版)

谢谢。我已经加星标了那些帖子,也有Kernighan和Ritchie的书。它很棒,是我的初恋。 :) - user201788

1
Nano是我最喜欢的编辑器。Vi也不错。虽然我还没有花时间去学习它们,但它们都可以帮助你提高编程经验。当遇到棘手的代码错误时,挂载SSH驱动器,然后使用你最喜欢的GUI程序远程打开文件。

我喜欢挂载SSH驱动器的想法。 - user201788
当连接出现问题时,这会带来“有趣”的问题。我猜你是指SSHFS? - Tim Post
是的先生。我一直在使用它。除非你失去了Wi-Fi或其他什么,否则它很好用。我在Ubuntu上使用过expandrive和sshfs,并且几乎可以实时编辑所有内容。到目前为止,我还没有失去任何东西。在Gedit中处理断开连接的错误处理并不是很好,但这只发生过一次! - Kyle Hotchkiss

0

大部分的系统编程都是用C语言完成的,正如在这里已经提到的。要理解Unix/Linux的思维方式和正确的做事方式,你需要阅读一些好书,比如Eric Raymond的《Unix编程艺术》和Richard Stevens的《Unix环境高级编程》。市场上也有一些新书,比如Robert Love的《Linux系统编程》和《Linux编程接口》,它们是最新的,但是它们没有像我之前提到的那些原始原则和思想。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接