1. 在运行时获取系统限制:
-
#include <unistd.h>
-
long sysconf(int name);
-
/*returns value of limit specified by name, or -1 if limit is indeterminate or an error occurred*/
2. 运行时获取与文件相关的限制:
-
#include <unistd.h>
-
long pathconf(const char *pathname, int name);
-
long fpathconf(int fd, int name);
-
/*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
|
指向当前工作目录的符号链接
|
environ
|
name->value键值对环境列表,、\0分割
|
exe
|
指向正在执行文件的符号链接
|
fd
|
文件目录,包含了指向由进程打开文件的符号链接
|
maps
|
内存映射
|
mem
|
进程虚拟内存
|
mounts
|
进程的安装点
|
root
|
指向根目录的符号链接
|
status
|
各种信息(如进程id、凭证、内存使用量、信号)
|
task
|
为进程中的每一个线程均包含一个子目录
|
/proc目录下的各种文件和子目录,提供了对系统级信息的访问,一般用途如下,其中方框表示目录,圆角矩形表示文件:
阅读(1007) | 评论(0) | 转发(0) |