我的目标是:“让我的家人生活得跟好”
1、Posix标准,posix = potable operating System interface for computer environment
由IEEE制订。
2、系统的限制
不同的平台系统都有限制,比如字长的区别,32位与64位。有点限制可以在头文件中定义,有点限制则和具体的实现有关系。比如最大文件长度,能打开的最大进程数目等。
ANSI c的限制在limits.h 中,同样posix也有一些限制在相应的头文件中。
例如:
white@white-desktop:/usr/include$ cat limits.h
/* Minimum and maximum values a `signed short int' can hold. */
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
一些限制值在编译时是可用的一些在运行时才能知道。
我们可以使用sysconf ,pathconf, fpathconf取得。
Sysconf 不与文件和目录相关的运行时限制
pathconf, fpathconf与文件和目录相关的运行时限制
例如下面的程序可以打印运行时的时间限制
/* 运行时间限制 */
#include<errno.h>
#include<unistd.h>
#include<stdio.h>
void pr_sysconf(char *msg, int name)
{
long val;
fputs(msg,stdout);
errno = 0;
if((val = sysconf(name)) < 0)
{
if(errno != 0) { printf("error in pr_sysconf/n");return ;}
fputs("not defined/n",stdout);
return ;
}
printf("%ld/n",val);
}
void pr_pathconf(char *msg,char *path, int name)
{
long val;
fputs(msg,stdout);
errno = 0;
if((val = pathconf(path,name)) < 0)
{
if(errno != 0) { printf("error in pr_sysconf/n");return ;}
fputs("not defined/n",stdout);
return ;
}
printf("%ld/n",val);
}
int main(int argc, char *argv[])
{
pr_sysconf("CHILD_MAX = ",_SC_CHILD_MAX); //每个进程最大的子进程数
pr_sysconf("PASS_MAX = ",_SC_PASS_MAX); //口令最大有效字节数
pr_sysconf("CLK_TCK = ",_SC_CLK_TCK); //每一秒的滴答数
pr_sysconf("ARG_MAX = ",_SC_ARG_MAX); //exec的最大参数长度
pr_sysconf("OPEN_MAX = ",_SC_OPEN_MAX); //每一个进程最大打开的文件数
pr_sysconf("STREAM_MAX = ",_SC_STREAM_MAX); //每一时刻 一个进程打开的最大标准io流数目,如果没有定义一定于FOPEN_MAX 相同
pr_sysconf("SAVE_IDS = ",_SC_SAVED_IDS); //是否支持保存的设置用户id,和设置组id
pr_sysconf("posix version = ",_SC_VERSION); //poxis 的版本
pr_pathconf("MAX_CANON = ", "/dev/tty",_PC_MAX_CANON);//在一终端输入的最大字节数
pr_pathconf("MAX_INPUT = ", "/dev/tty",_PC_MAX_INPUT);//终端输入可用空间的最大字节数
pr_pathconf("MAX_NAME = ", argv[1],_PC_NAME_MAX);//文件名的最大长度
pr_pathconf("MAX_path = ", argv[1],_PC_PATH_MAX);//相对路径的最大字节数
pr_pathconf("MAX_PIPE_BUF = ", argv[1],_PC_PIPE_BUF);//原子地写一个管道的最大字节数
}
1、 功能测试宏
判断是否支持某一个标准:
例如我们需要使用ANSI C 可使用 __STDC__
例如
#ifdef __STDC__
void func(const char *str)
#else
Void func(char *str)
#endif