-
Cadence入门教程中的基本系统数据类型
资源介绍
其值不应被改变,但是在S V R 4和4 . 3 + B S D之下,可以调用setrlimit (2) 函数更改一
个运行进程的此值(也可用C Shell的l i m i t或Bourne shell和K o r nSh e l l的u l i m i t命令
更改)。如果系统支持这种功能,则可以将程序 2 - 3更改为每次调用此程序时就调
用s y s c o n f,而不只是第一次调用此程序时。
2.6 功能测试宏
正如前述,在头文件中定义了很多 P O S I X . 1和X P G 3的符号。但是除了P O S I X . 1和X P G 3定
义外,大多数实现在这些头文件中也加上了它们自己的定义。如果在编译一个程序时,希望它
只使用P O S I X定义而不使用任何实现定义的限制,那么就需定义常数 _ P O S I X _ S O U R C E,所有
P O S I X . 1头文件中都使用此常数。当该常数定义时,就能排除任何实现专有的定义。
常数_ P O S I X _ S O U R C E及其对应的常数 _ X O P E N _ S O U R C E被称之为功能测试宏( f e a t u r e
test macro)。所有功能测试宏都以下划线开始。当要使用它们时,通常在 c c命令行中以下列方
式定义:
cc -D_POSIX_SOURCE file.c
这使得在C程序包括任何头文件之前,定义了功能测试宏。如果我们仅想使用 P O S I X . 1定
义,那么也可将源文件的第一行设置为:
#define _POSIX_SOURCE 1
另一个功能测试宏是:_ _STDC_ _,它由符合ANSI C标准的编译程序自动定义。这样就
允许我们编写ANSI C编译程序和非ANSI C编译程序都能编译的程序。例如,一个头文件可能
会是:
#ifdef __ S T D C__
void *myfunc(const char *, int);
# e l s e
void *myfunc();
# e n d i f
这样就能发挥ANSI C原型功能的长处,要注意在开始和结束处的两个连续的下划线常常
打印成一个长下划线(如同上面一个样本源代码中一样 )。
2.7 基本系统数据类型
历史上,某些U N I X变量已与某些C数据类型联系在一起,例如,历史上主、次设备号存放
在一个1 6位的短整型中,8位表示主设备号,另外8位表示次设备号。但是,很多较大的系统需
要用多于2 5 6个值来表示其设备号,于是,就需要有一种不同的技术。(确实,S V R 4用3 2位表
示设备号:1 4位用于主设备号,1 8位用于次设备号。)
头文件< s y s / t y p e s . h >中定义了某些与实现有关的数据类型,它们被称之为基本系统数据类
3 2 U N I X环境高级编程