13.19.使用 POSIX 标准
FreeBSD ports 一般都希望能符合 POSIX 标准。一些软件和联编系统会根据特定的操作系统或环境做出假设, 而这些假设在 port 中使用时可能会导致问题。
如果有其他方法可以获得这些信息, 请不要使用 /proc 。例如,在 main() 中使用 setprogname(argv[0])
,然后使用 getprogname(3) 来了解可执行文件的名称。
不要依赖 POSIX 没有记载的行为。
如果应用程序的关键路径上也没有工作,就不要记录时间戳。获取时间戳可能很慢,这取决于操作系统中时间戳的准确性。如果真的需要时间戳,确定它们必须有多精确,并使用有记录的 API 来提供所需的精度。
由于缓存和 vsyscall 的性能优化,一些简单的系统调用(例如 gettimeofday(2), getpid(2))在 Linux® 上要比在其他操作系统上快很多。在对性能要求很高的应用程序中,不要依赖它们的廉价。一般来说,如果可能的话,尽量避免使用系统调用。
不要依赖 Linux® 特定的套接字行为。 特别是,默认的套接字缓冲区大小是不同的(用 SO_SNDBUF
和 SO_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 那样是个大问题。
最后更新于