13.19.使用 POSIX 标准

FreeBSD ports 一般都希望能符合 POSIX 标准。一些软件和联编系统会根据特定的操作系统或环境做出假设, 而这些假设在 port 中使用时可能会导致问题。

如果有其他方法可以获得这些信息, 请不要使用 /proc 。例如,在 main() 中使用 setprogname(argv[0]),然后使用 getprogname(3) 来了解可执行文件的名称。

不要依赖 POSIX 没有记载的行为。

如果应用程序的关键路径上也没有工作,就不要记录时间戳。获取时间戳可能很慢,这取决于操作系统中时间戳的准确性。如果真的需要时间戳,确定它们必须有多精确,并使用有记录的 API 来提供所需的精度。

由于缓存和 vsyscall 的性能优化,一些简单的系统调用(例如 gettimeofday(2), getpid(2))在 Linux® 上要比在其他操作系统上快很多。在对性能要求很高的应用程序中,不要依赖它们的廉价。一般来说,如果可能的话,尽量避免使用系统调用。

不要依赖 Linux® 特定的套接字行为。 特别是,默认的套接字缓冲区大小是不同的(用 SO_SNDBUFSO_RCVBUF 调用 setockopt(2),当套接字缓冲区满时,Linux® 的 send(2) 会阻塞,而 FreeBSD 的会失败并在 errno 设置 ENOBUFS)。

如果需要依赖非标准的行为,请将其适当地封装到一个通用的 API 中,在配置阶段对该行为进行检查,如果缺少则停止。

检查 手册页,看使用的函数是否是 POSIX 接口(在手册页的“STANDARDS”部分)。

不要假设 /bin/sh 是 bash。确保传递给 system(3) 的命令行能在符合 POSIX 标准的 shell 中工作。

这里有一份常见的 bash 机制的清单。

检查头文件是否以 POSIX 或 man page 推荐的方式包含。例如,sys/types.h 经常被遗忘,这对 Linux® 来说并不像对 FreeBSD 那样是个大问题。

最后更新于

FreeBSD 中文社区