您好,我正在研究 C 编程。
我想知道 C 语言中的 Linux 和 OSX 之间是否存在差异?我知道 Windows 和 Linux/Unix 之间有一些(比如获取系统时间戳)。是否有任何特定的命令或技术不适用于两者之一?“基本”程序应该在两者上运行吗?
我知道 C 不是交叉编译语言,但 OSX 和 Linux 都是 Unix - 不是吗?
您好,我正在研究 C 编程。
我想知道 C 语言中的 Linux 和 OSX 之间是否存在差异?我知道 Windows 和 Linux/Unix 之间有一些(比如获取系统时间戳)。是否有任何特定的命令或技术不适用于两者之一?“基本”程序应该在两者上运行吗?
我知道 C 不是交叉编译语言,但 OSX 和 Linux 都是 Unix - 不是吗?
改变的不是语言本身,而是库(和相关的 API 调用)。Mac OSX 和 Linux 在这方面没有区别,只要你坚持使用标准的 POSIX 调用。Linux 和 Mac OSX 都是符合 POSIX 的系统。
当然,当谈到专有的 Apple 库时,你不能指望在 Linux 下找到它们。但这是另一个问题。Linux 内部也是如此。
请注意,我们谈论的是源代码兼容性,而不是二进制兼容性。您根本不必修改源代码,但您必须为每个平台分别编译它。
Linux 包括对 Linux 和 Darwin 都遵循的基本 POSIX 标准的相当多的扩展(Linux 是“标准”,因为它与 Linux 完全一样)。正如 Stefano 所指出的,在许多情况下这很好,但是如果您有一个为 Linux 编写的程序而不关心可移植性(“在 Ubuntu 和 SuSE 上运行”不是“可移植性”),您应该会看到一些不同的行为并且缺少扩展名。例如,mremap()
和pipe2()
是特定于 Linux 的函数。SOCK_NONBLOCK
是特定于 Linux 的标志socket()
,等等。手册页通常会在“符合”部分中指出某些内容是特定于 Linux 的。