是否有必要学习特定于Linux的API?

时间:2012-08-19 14:07:37

标签: c++ c linux boost cross-platform

我开始从Windows迁移到Linux开发。在此过程中,我需要“忘记”所有熟悉的Windows API(WaitForSingleObjectCreateTimer等)并学习一堆特定于Linux的API。
所以,我的问题是......我应该吗? 我的意思是,如果像Boost这样的跨平台库常用于Linux社区,我是否真的需要提前学习特定于Linux的API?

我很清楚,至少熟悉API是个好主意,但......专业行业最常见的是什么?大多数以Linux为重点的软件公司是否使用跨平台库或特定于操作系统的API?

2 个答案:

答案 0 :(得分:3)

这取决于你将要使用/需要的东西有多复杂。例如,当使用boost时,Linux对System V信号量有SEM_UNDO选项,该选项不可用。通常,boost可移植性不是免费的,您将只能使用不同O /​​ S可能性的公共子集。如果这对你来说已经足够了,请选择boost并且不要处理(有时)模糊的低级API。这不仅可以使您的程序更具可移植性(在某种程度上),而且还可以减少错误。

答案 1 :(得分:3)

作为纯粹的C程序员,我依靠长期成功的POSIX standard。对我来说,这是我在基于UNIX的系统中使用过的最好的可移植API。正如@Shi在评论中指出的那样,无论您是在为嵌入式计算机还是桌面/服务器计算机进行开发都很重要,因为Boost非常重要。我也是一名嵌入式系统开发人员,即使对于uCLinux(用于嵌入式系统的微小Linux端口),POSIX标准也非常便携。

我认为POSIX标准的优势在于其低水平的实施。它涉及多年来不太可能发生变化的基本计算机概念(设备I / O,内存管理,IPC ......)。我们习惯于看到我们与计算机交互方式的变化,而不是计算机实际工作方式的变化,而POSIX标准由于其在处理计算机工作方式上的成熟度而变得强大。的确,我爱上了fork(),pipe(),read()和write()这些神奇的函数: - )