基本系统数据类型-hds ams 2500用户手册
其值不应被改变,但是在SVR4和4.3+BSD之下,可以调用setrlimit(2)函数更改一个运行进程的此值(也可用C Shell的limit或Bourne shell和KornShell的ulimit命令更改)。如果系统支持这种功能,则可以将程序2-3更改为每次调用此程序时就调用sysconf,而不只是第一次调用此程序时。您是否想进一步了解如何更改运行进程的值?可以查看《Unix系统编程》了解详细步骤。
2.6功能测试宏正如前述,在头文件中定义了很多POSIX.1和XPG3的符号。但是除了POSIX.1和XPG3定义外,大多数实现在这些头文件中也加上了它们自己的定义。如果在编译一个程序时,希望它只使用POSIX定义而不使用任何实现定义的限制,那么就需定义常数_POSIX_SOURCE,所有POSIX.1头文件中都使用此常数。当该常数定义时,就能排除任何实现专有的定义。常数_POSIX_SOURCE及其对应的常数_XOPEN_SOURCE被称之为功能测试宏(feature test macro)。所有功能测试宏都以下划线开始。当要使用它们时,通常在cc命令行中以下列方式定义:cc -D_POSIX_SOURCE file.c
。这使得在C程序包括任何头文件之前,定义了功能测试宏。如果我们仅想使用POSIX.1定义,那么也可将源文件的第一行设置为:#define _POSIX_SOURCE 1
。是否对POSIX功能测试宏的更多用法感兴趣?推荐您阅读《POSIX系统多线程编程指导》来进一步深入学习。
另一个功能测试宏是:STDC,它由符合ANSI C标准的编译程序自动定义。这样就允许我们编写ANSI C编译程序和非ANSI C编译程序都能编译的程序。一个头文件可能会是:
#ifdef __STDC__
void *myfunc(const char *, int);
#else
void *myfunc();
#endif
这样就能发挥ANSI C原型功能的长处,要注意在开始和结束处的两个连续的下划线常常打印成一个长下划线(如同上面一个样本源代码中一样)。想知道更多关于ANSI C标准编译程序的详细信息吗?请查看《Unix编程艺术》。
2.7基本系统数据类型历史上,某些UNIX变量已与某些C数据类型联系在一起,历史上主、次设备号存放在一个16位的短整型中,8位表示主设备号,另外8位表示次设备号。但是,很多较大的系统需要用多于256个值来表示其设备号,于是,就需要有一种不同的技术。(确实,SVR4用32位表示设备号:14位用于主设备号,18位用于次设备号。)头文件