2.9 标准之间的冲突
就整体而言,这些不同的标准之间配合得相当好。但是我们也很关注它们之间的差别,特别是ISO C标准和POSIX.1之间的差别,而它们之间也确实有一些差别(因为SUS v3是POSIX.1 的超集,所以不对它进行特别的说明)。
ISO C定义了函数clock,它返回进程使用的CPU时间,返回值类型是clock_t。为了将此值变换成以秒为单位,将其除以在<time.h>头文件中定义的CLOCKS_PER_SEC。POSIX.1 定义了函数times,它返回其调用者及其所有终止子进程的CPU时间以及时钟时间,所有这些值都是clock_t类型值。sysconf函数用来获取每秒钟的滴答数,用于表示times函数的返回值。有一个相同的术语,即每秒钟的滴答数,但ISO C和POSIX.1的定义却不同。这两个标准也用同一数据类型(clock_t)来保存这些不同的值,这种差别可以在Solaris中看到,其中clock返回微秒数(因此,CLOCK_PER_SEC是一百万),而sysconf为每秒钟的滴答数返回的值是100。
另一个可能产生冲突的领域是:在ISO C标准定义函数时,可能没有考虑到POSIX.1的某些要求。在POSIX环境下,有些函数可能要求有一个与C环境下不同的实现,因为POSIX环境中有多个进程,而ISO C环境则很少考虑主机操作系统。尽管如此,很多依从POSIX的系统为了兼容性也会实现ISO C函数。signal函数就是一个例子。如果在不了解的情况下使用了Solaris 所提供的signal函数(希望编写可在ISO C环境和较早的UNIX系统中运行的可移植代码),那57 么它将提供与POSIX.1 sigaction函数不同的语义。第10章将对signal函数作更多说明。







