天天看點

Gnu/Linux系統C程式設計之-系統限制

下面介紹sysconf函數的使用,它允許應用程式在運作時獲得系統的限制。

函數的原型為:

<code>#include &lt;unistd.h&gt;</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 &lt;stdio.h&gt;</code>

<code>#include &lt;stdlib.h&gt;</code>

<code>#include &lt;errno.h&gt;</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

繼續閱讀