1. 在运行时获取系统限制:

点击(此处)折叠或打开

  1. #include <unistd.h>
  2. long sysconf(int name);
  3. /*returns value of limit specified by name, or -1 if limit is indeterminate or an error occurred*/
2. 运行时获取与文件相关的限制:

点击(此处)折叠或打开

  1. #include <unistd.h>
  2. long pathconf(const char *pathname, int name);
  3. long fpathconf(int fd, int name);
  4. /*both return value of limit specified by name, or -1 if limit is indeterminate or an error occurred*/
3. 不确定限制

有时系统实现并未将一些系统限制定义为限制常量(如PATH_MAX),并且sysconf(), pathconf()在返回相应限制时会将其归为不确定,对此,可以采用如下策略之一:
  • 当编写一个可以在多个unix实现之间一直的应用程序时,选择使用susv3所规定的最低限制值。
  • 在某些情况下,切实可行的解决方法是省去对限制的检查,取而代之以指向相关的系统调用或库函数。如果调用失败,且errno表名出错时由于超出了系统限制时,那么可以根据需要调整应用的行为,并再次尝试调用
  • 自行编写程序或函数,以推断或估算限制值
  • 可以利用GNU Autoconf之类的扩展工具


4. 系统选项
通过在文件中定义相应常量,UNIX实现能够在编译时通告其对特定SUSv3选项的支持。此类常量的命名均会冠以前缀(_POSIX_或者_XOPEN_),以标识其源于何种标准。
各个选项常量,一经定义,其值必为下列之一:
  • -1, 表示实现不支持该选项
  • 0,表示实现可能支持该选项,需要靠sysconf()或pathconf()
  • >0,表示其支持该选项
5. /proc 文件系统

获取与进程有关的信息:/proc/PID
每个/proc/PID目录中都存在一个命名为status的文件夹,提供了有关该进程的一系列信息:
文件描述(进程属性)
cmdline以\0分割的命令行参数
cwd指向当前工作目录的符号链接
environname->value键值对环境列表,、\0分割
exe指向正在执行文件的符号链接
fd文件目录,包含了指向由进程打开文件的符号链接
maps内存映射
mem进程虚拟内存
mounts进程的安装点
root指向根目录的符号链接
status各种信息(如进程id、凭证、内存使用量、信号)
task为进程中的每一个线程均包含一个子目录

/proc目录下的各种文件和子目录,提供了对系统级信息的访问,一般用途如下,其中方框表示目录,圆角矩形表示文件:
linux当中的系统限制以及相关系统信息-LMLPHP





10-17 14:34
查看更多