下面介绍sysconf函数的使用,它允许应用程序在运行时获得系统的限制。
函数的原型为:
<code>#include <unistd.h></code>
<code>long sysconf(int name);</code>
<code> </code><code>Returns value of limit specified by name,</code>
<code> </code><code>or –1 </code><code>if</code> <code>limit is indeterminate or an error occurred</code>
name参数是在unistd.h头文件中定义的一些_SC_*常量。如果传入的name参数是不合法的,sysconf()函数将返回-1。
示例代码如下:
<code>[root@lavenliu syslim]# cat my_sysconf.c </code>
<code>#include <stdio.h></code>
<code>#include <stdlib.h></code>
<code>#include <errno.h></code>
<code>static</code> <code>void</code> <code>pr_sysconf(</code><code>const</code> <code>char</code> <code>*msg, </code><code>int</code> <code>name)</code>
<code>{</code>
<code> </code><code>long</code> <code>lim;</code>
<code> </code><code>errno</code> <code>= 0;</code>
<code> </code><code>lim = sysconf(name);</code>
<code> </code><code>if</code> <code>(lim != -1) {</code>
<code> </code><code>printf</code><code>(</code><code>"%s %ld\n"</code><code>, msg, lim);</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>if</code> <code>(</code><code>errno</code> <code>== 0) {</code>
<code> </code><code>printf</code><code>(</code><code>"%s (indeterminate)\n"</code><code>, msg);</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>perror</code><code>(</code><code>"sysconf error"</code><code>);</code>
<code> </code><code>exit</code><code>(1);</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code>}</code>
<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code> <code>*argv[])</code>
<code> </code><code>pr_sysconf(</code><code>"_SC_ARG_MAX: "</code><code>, _SC_ARG_MAX);</code>
<code> </code><code>pr_sysconf(</code><code>"_SC_LOGIN_NAME_MAX: "</code><code>, _SC_LOGIN_NAME_MAX);</code>
<code> </code><code>pr_sysconf(</code><code>"_SC_OPEN_MAX: "</code><code>, _SC_OPEN_MAX);</code>
<code> </code><code>pr_sysconf(</code><code>"_SC_NGROUPS_MAX: "</code><code>, _SC_NGROUPS_MAX);</code>
<code> </code><code>pr_sysconf(</code><code>"_SC_PAGESIZE: "</code><code>, _SC_PAGESIZE);</code>
<code> </code><code>pr_sysconf(</code><code>"_SC_RTSIG_MAX: "</code><code>, _SC_RTSIG_MAX);</code>
<code> </code>
<code> </code><code>return</code> <code>0;</code>
编译运行,
<code>gcc -o my_sysconf my_sysconf.c</code>
<code>.</code><code>/my_sysconf</code>
<code>_SC_ARG_MAX: 2621440</code>
<code>_SC_LOGIN_NAME_MAX: 256</code>
<code>_SC_OPEN_MAX: 1024</code>
<code>_SC_NGROUPS_MAX: 65536</code>
<code>_SC_PAGESIZE: 4096</code>
<code>_SC_RTSIG_MAX: 32</code>
从命令行获取这些限制:
<code>getconf variable-name [ pathname ]</code>
<code>getconf ARG_MAX</code>
<code>2621440</code>
<code>getconf NAME_MAX </code><code>/boot</code>
<code>255</code>
版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任
本文转自 bigstone2012 51CTO博客,原文链接:http://blog.51cto.com/lavenliu/1782927