找出 Posix API 是否由 OS 实现的简单方法
Easy way to find out whether a Posix API is implemented by an OS
在编写我的代码时,我想到了对所有 POSIX OS 有一个共同的实现,而不是为每个 OS 单独实现。我使用的 POSIX API 之一是 posix_fallocate(),在测试时我发现 MacOS.
不支持它
如果我早点知道这一点,我就不会使用这个 API 或者每个 OS 都有单独的实现。
所以我的问题是 - 在不同的 OS 中找到对特定 posix 调用的支持的简单方法是什么?人们是否总是需要为每个目标搜索文档 OS?
谢谢。
查看文档是一个好的开始,但它通常不会告诉您某个特定功能何时实现,这也很重要。对于不知名的平台,可能很难判断哪些旧版本仍然相关,这使得决定是否可以接受对特定 POSIX 功能的依赖变得更加困难。
另一个问题是功能是否已实现,但质量不合格。 posix_fallocate
在这方面是一个有趣的极端案例。如果文件系统不支持实际的低级 fallocate
操作(例如直到最近的 NFS),则 glibc 实现使用仿真:
根据您的应用程序的用途,这种行为可能是不可接受的。仅检查头文件和文档可能无法揭示这一点(例如,上述文档中的 Note 部分是最近才添加的)。
最后,没有一个好的替代品可以尽早在所有相关目标上构建和测试,但我知道这对于非 Linux 目标来说越来越困难。
在编写我的代码时,我想到了对所有 POSIX OS 有一个共同的实现,而不是为每个 OS 单独实现。我使用的 POSIX API 之一是 posix_fallocate(),在测试时我发现 MacOS.
不支持它如果我早点知道这一点,我就不会使用这个 API 或者每个 OS 都有单独的实现。
所以我的问题是 - 在不同的 OS 中找到对特定 posix 调用的支持的简单方法是什么?人们是否总是需要为每个目标搜索文档 OS?
谢谢。
查看文档是一个好的开始,但它通常不会告诉您某个特定功能何时实现,这也很重要。对于不知名的平台,可能很难判断哪些旧版本仍然相关,这使得决定是否可以接受对特定 POSIX 功能的依赖变得更加困难。
另一个问题是功能是否已实现,但质量不合格。 posix_fallocate
在这方面是一个有趣的极端案例。如果文件系统不支持实际的低级 fallocate
操作(例如直到最近的 NFS),则 glibc 实现使用仿真:
根据您的应用程序的用途,这种行为可能是不可接受的。仅检查头文件和文档可能无法揭示这一点(例如,上述文档中的 Note 部分是最近才添加的)。
最后,没有一个好的替代品可以尽早在所有相关目标上构建和测试,但我知道这对于非 Linux 目标来说越来越困难。