apue第二章

来源:互联网 发布:薛之谦淘宝店叫什么 编辑:程序博客网 时间:2024/05/17 03:17

我的目标是:“让我的家人生活得跟好”

1Posix标准,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

 

原创粉丝点击