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