1.UNIX标准化:
UNIX有很多标准,限制了各种东西,要不然大家一人做一个UNIX岂不是很乱?其中有几种标准:ISOC,IEEEPOSIX,SingleUNIX Specification,FIPS,具体这些实现清百度。
很多限制都在头文件limit.h中
2.UNIX具体实现:
其中几个重要的实现,分别是:SVR4,4.4BSD,FreeBSD,Linux,MacOS X,Solaris,还有很多UNIX操作系统,这些是很少的一部分,unix可不像windows,是很多种的。
3.函数sysconf,pathconf,fpathconf
某些限制在各种协议里面已经确定了,某些限制值在编译时是可用的,而另一些则必须在运行时确定,运行时限制可以调用这三个函数之一获得。
#include<unistd.h>
longsysconf(int name);
longpathconf(const char *pathname,int name);
logfpathconf(int fd,int name);
后面两个函数的区别是一个用文件路径作为参数,另一个则用文件描述符来作为参数。
在书的34-35页写了name参数的各种,欢迎大家查阅。
还有各种测试返回值的结果,在书的34-35页一种6条,比较统一的是如果参数错误或者返回值不确定那么返回值都是-1
4.功能测试宏
头文件定义了很多POSIX。1和XSI符号,但是除了这两种定义外,大多数是现在这些头文件中页加入了他们自己的定义,如果在编译一个程序的时候只希望它只同POSIX的定义相关,而不与任何实现定义的长两冲突,那么就需要定义常量_POSIX_C_SOURCE,一旦定义了_POSIX_C_SOURCE,所有POSIX.1头文件都使用此常量来排除任何实现专有的定义,就是就用POSIX定义了,别的咱不用了!
常量_POSIX_C_SOURCE和_XOPEN_SOURCE被称为功能测试宏,所有的功能测试宏都以下划线开始,当要使用他们的时候,通常在CC命令中用下列方式定义:
cc-D_POSIX_C_SOURCE=200809L file.c
也可以在C程序的第一行用
#define_POSIX_C_SOURCE200809L
SUS将c99实用程序定义为C编译环境的借口,随之,就可以用一下方式编译文件:
c99 -D_XOPEN_SOURCE=700 file.c -o file
推荐使用gcc实现1999ISO C扩展,如下所示:
gcc -D_XOPEN_SOURCE=700 -std=c99 file.c -o file
PS:说白了,功能测试宏就是在命令上做文章,来为你的程序定义仅有的标准。大家了解即可。