《UNIX环境高级编程(第3版)》——2.9 标准之间的冲突

简介: 就整体而言,这些不同的标准之间配合得相当好。因为SUS基本说明和POSIX.1是同一个东西,所以我们不对它们进行特别的说明,我们主要关注ISO C标准和POSIX.1之间的差别。它们之间的冲突并非有意,但如果出现冲突,POSIX.1服从ISO C标准。

本节书摘来自异步社区《UNIX环境高级编程(第3版)》一书中的第2章,第2.9节,作者:【美】W. Richard Stevens , Stephen A.Rago著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.9 标准之间的冲突

就整体而言,这些不同的标准之间配合得相当好。因为SUS基本说明和POSIX.1是同一个东西,所以我们不对它们进行特别的说明,我们主要关注ISO C标准和POSIX.1之间的差别。它们之间的冲突并非有意,但如果出现冲突,POSIX.1服从ISO C标准。然而它们之间还是存在着一些差别的。

ISO C定义了clock函数,它返回进程使用的CPU时间,返回值是clock_t类型值,但ISO C标准没有规定它的单位。为了将此值变换成以秒为单位,需要将其除以在头文件中定义的CLOCKS_PER_SEC。POSIX.1定义了times函数,它返回其调用者及其所有终止子进程的CPU时间以及时钟时间,所有这些值都是clock_t类型值。sysconf函数用来获得每秒滴答数,用于表示times函数的返回值。ISO C和POSIX.1用同一种数据类型(clock_t)来保存对时间的测量,但定义了不同的单位。这种差别可以在Solaris中看到,其中clock返回微秒数(CLOCK_PER_SEC是100万),而sysconf为每秒滴答数返回的值是100。因此,我们在使用clock_t类型变量的时候,必须十分小心以免混淆不同的时间单位。

另一个可能产生冲突的地方是:在ISO C标准说明函数时,可能没有像POSIX.1那样严。在POSIX环境下,有些函数可能要求有一个与C环境下不同的实现,因为POSIX环境中有多个进程,而ISO C环境则很少考虑宿主操作系统。尽管如此,很多符合POSIX的系统为了兼容性也会实现ISO C函数。signal函数就是一个例子。如果在不了解的情况下使用了Solaris提供的signal函数(希望编写可在ISO C环境和较早UNIX系统中运行的可兼容程序),那么它提供了与POSIX.1 sigaction函数不同的语义。第10章将对signal函数做更多说明。

相关文章
|
Unix Linux C语言
计算机操作系统实验一 Unix/Linux编程开发环境
计算机操作系统实验一 Unix/Linux编程开发环境
163 0
|
5月前
|
Unix
Unix环境高级编程(第三版)中apue.h头文件及其依赖安装教程
Unix环境高级编程(第三版)中apue.h头文件及其依赖安装教程
105 0
|
12月前
|
Unix Shell Python
unix高级编程-fork和execve
unix高级编程-fork和execve
55 0
|
12月前
|
Ubuntu Unix Shell
unix高级编程-fork之后父子进程共享文件
unix高级编程-fork之后父子进程共享文件
59 0
|
12月前
|
Unix Linux
unix高级编程-僵尸进程和孤儿进程
unix高级编程-僵尸进程和孤儿进程
60 0
|
Unix Linux Shell
Unix/Linux环境使用(基础篇)(五)
Unix/Linux环境使用(基础篇)(五)
|
网络协议 安全 Ubuntu
Unix/Linux环境使用(基础篇)(四)
Unix/Linux环境使用(基础篇)(四)
|
Ubuntu Unix Linux
Unix/Linux环境使用(基础篇)(三)
Unix/Linux环境使用(基础篇)(三)
|
安全 Unix Linux
Unix/Linux环境使用(基础篇)(二)
Unix/Linux环境使用(基础篇)(二)
|
Ubuntu 安全 NoSQL
Unix/Linux环境使用(基础篇)(一)
Unix/Linux环境使用(基础篇)(一)