三十七 sysconf()函数应用举例:查看CPU及内存信息

来源:互联网 发布:mastercamx9编程技巧 编辑:程序博客网 时间:2024/05/29 18:30

#include <stdio.h>
#include <unistd.h>#define ONE_MB (1024 * 1024)int main (void)
{    long num_procs;    long page_size;    long num_pages;    long free_pages;    long long  mem;    long long  free_mem;

    num_procs = sysconf (_SC_NPROCESSORS_CONF);
    printf ("CPU 个数为: %ld \n", num_procs);

    page_size = sysconf (_SC_PAGESIZE);
    printf ("系统页面的大小为: %ld K\n", page_size / 1024 );

    num_pages = sysconf (_SC_PHYS_PAGES);
    printf ("系统中物理页数个数: %ld \n", num_pages);

    free_pages = sysconf (_SC_AVPHYS_PAGES);
    printf ("系统中可用的页面个数为: %ld \n", free_pages);

    mem = (long long) ((long long)num_pages * (long long)page_size);
    mem /= ONE_MB;

    free_mem = (long long)free_pages * (long long)page_size;
    free_mem /= ONE_MB;

    printf ("总共有 %lld MB 的物理内存空闲的物理内存有: %lld MB\n", mem, free_mem);    return (0);
}

用 sysconf() 函数确定可配置的系统变量的值。

原型是

引用

#include <unistd.h>
long sysconf (int name);



sysconf() 返回选项 (变量的当前值,这个值可配置的但也是受系统限制的。在成功完成的情况下,sysconf() 返回变量的当前值。该值受到的限制将少于编译时 <limits.h>, <unistd.h> 或 <time.h> 中可用的对应值。大多数这些变量的值在调用进程的生存时间内不变。

如果出错,那么函数返回 -1 ,并适当地设置 errno 。当没有错误发生时, -1 也是一个合法的返回值。因此,程序要检查错误,应该在调用 sysconf() 之前将 errno 设置为 ,然后,如果返回 -1,则检验到错误。

参数 name 指定我们感兴趣的运行时限制的名字,它必须是以值中之一(除非另有说明,否则返回值都是整数)

引用

_SC_2_C_BIND  :  一个布尔值,指出是否支持 POSIX C 语言绑定。返回值是 _POSIX2_C_BIND 

_SC_2_C_DEV  :  一个布尔值,指出是否支持 POSIX C 语言开发使用工具选项。返回值是 _POSIX2_C_DEV 

_SC_2_C_VERSION :  它指出支持哪一个 ISO POSIX.2 标准 (命令的版本。返回值是 _POSIX2_C_VERSION 

_SC_2_CHAR_TERM :  一个布尔值,指出是否至少支持一个终端。返回值是 _POSIX2_CHAR_TERM 

_SC_2_FORT_DEV  :  一个布尔值,指出是否支持 FORTRAN 开发使用工具选项。返回值是 POSIX2_FORT_DEV 



... .... 待补充 ... ...

使用 sysconf() 函数时,必须注意

1CLK_TCK 的值是可变的,因此,不应该假设它是一个编译时间常量。

2、调用 setrlimit 会使 OPEN_MAX 的值发生改变。

3、 通过将 sysconf (_SC_PHYS_PAGES) 和 sysconf (_SC_PAGESIZE) 相乘,来确定物理内存的总量 (以字节为单位可以返回一个值,该值超出 32 位进程中 long 或 unsigned long 可表示的最大值。同样适用于通过将 sysconf (_SC_PAGESIZE) 和 sysconf (_SC_AVPHYS_PAGES) 想乘,来确定未使用的物理内存的总量 (以字节为单位)。这个问题有两个工作区。第 个工作区将程序作为 64 位的进程进行编译 (从而使 long 足够大到可以容纳乘法运算的结果,但是,这样做的缺点是得到的程序只能在 64 位的内核中运行。第 个工作区是用来将得到的乘法运算结果存储在一个 64 位的量中,如 longlong_t  (Solaris OS 类型或 long long (linux)。它的有点是可以在 32 位和 64 位的内核中正确工作。



0 0
原创粉丝点击