The C language and Mac OSX



我想知道这里是否有人能帮助我更好地理解OSX和C之间的关系。xcode中有一些与C++有关的开发人员信息,但没有关于C的信息。

我认为一个根本的区别是osx使用libc而不是glibc。有人能给我指一下libc文档吗?我好像找不到。

我看到了usr/includes文件夹,但这让我想知道在哪里可以获得一个说明所有可用选项的参考。例如,我刚刚发现了<tree.h>。这一切都很好,但有文件吗?还是我需要搜索包含文件夹?

您似乎在问OSX作为程序员为您提供的功能是否与其他*nix系统有部分不同;重点介绍OSX的C标准库实现为您提供的功能。

现在请记住,虽然C标准库是利用操作系统内核公开的功能的一种非常常见的方式,但它并不是唯一的方式。您可以使用其他低级库,也可以自己编写低级函数。

话虽如此,请考虑以下内容:

  • OSX和许多其他*nix系统一样,"大部分都符合POSIX"。这意味着其特定的C标准库实现可能会公开POSIX标准定义的头。无论使用libcglibc还是C标准库的其他实现,都可以依赖这些内容
  • 根据您使用的特定C标准库,它可能会附带其他功能,比如BSD-libc——我们称之为"POSIX标准库的超集"。虽然它可以包含特定于BSD(因此也包括OSX)的东西的实现,但它似乎主要包含可以实现的东西,而不管操作系统的风格如何。例如,您提到的sys/tree.h标头是"红黑树和飞溅树的实现"——这绝不是在Linux系统上无法实现的

综上所述:

  • OSX附带了一个名为BSD libc的C标准库的实现,它在POSIX标准定义的基础上提供了一些额外的头
  • OSX使用的XNU内核和其他*nix内核之间的功能差异不一定会体现在C标准库实现之间的差异中。如果你想知道XNU内核能为你做什么,而Linux内核不能,那么从内核本身开始

因此您的问题可以分为:

  • glibcBSD libc之间有什么区别

  • XNU内核和Linux内核之间的区别是什么

您的要求有点不清楚。

OSX是基于FreeBSD之上的,FreeBSD是一个兼容POSIX的UNIX操作系统。OS X和C之间的关系是,C是为平台开发的众多编程语言之一(C是Objective-C的核心,这是苹果公司推崇的一种未使用的语言)。

OS X不使用libc。clang是编译器,作为苹果OS X开发工具包的一部分提供,它使用libc。这是有区别的。如果你想使用glib,可以从Homebrew或Macports中获取GCC,并使用它来编译你的程序,而不是clang。

最后,您找不到libc的文档,因为所有的C库,如libc、glibc等,如果符合标准,都会提供相同的函数集。不同的C库在最终用户方面往往没有什么不同;因此,如果您想了解头文件,可以使用man,例如:man clang来读取clang文档。

希望这能有所帮助。

最新更新