总的来说,这些不同的标准彼此都很好的相处。既然SUSv3是POSIX.1的超集,我们主要关心的ISO C和POSIX.1之间是任何差异。它们确实有些差异。
ISO
C定义了函数clock来返回进程使用的CPU时间的量。这个返回值是clock_t值。为了把它转换成秒,我们用它除以CLOCKS_PER_SEC,
它定义在头文件里。POSIX.1定义了函数times来返回CPU时间(给调用者和它的terminated
children)和时钟时间。所有这些时间值都是clock_t值。sysconf函数用来得到每秒的时钟tick数,与times函数的返回值一起使
用。我们有相同的术语:每秒钟的tick数,但在ISO
C和POSIX.1有不同的定义。两个标准都使用相同的数据类型(clock_t)来表示这些不同的值。这个差异可以在Solaris里看到,clock
返回微秒(导致CLOCK_PER_SEC值为一百万),而sysconf返回值100作为每秒的时钟tick数。
当ISO C标准规定一个函数但不像POSIX.1那样强硬地规定时,会有潜在的冲突。这种情况函数会要求在POSIX环境(在多进程环境下)和ISO
C环境下(基本不设想当前的操作系统)有不同的实现。signal函数就是一个例子。如果我们不明就里地使用由Solaris提供的signal函数(期
望写出可以运行在ISO
C环境和更老的UNIX系统上的代码),它将提供与POSIX.1的sigaction函数不同的语义。后面在谈到signal时我们会更深入地讨论。
阅读(874) | 评论(0) | 转发(0) |