CALENDAR

2009年6月
« 5月   9月 »
1234567
891011121314
15161718192021
22232425262728
2930  

CATEGORIES

ARCHIVES

あわせて読みたい

  • LOADING...

C + システムリソース設定

setrlimit(2), getrlimit(2) メモ。

コマンドラインから ulimit -n 1024 などとせず、プログラム上から設定するやつ。
limits.conf 以上の値を割り当てようとすると失敗するぽい。

サンプルソース

#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
 
#ifndef RLIM_INFINITY
#define RLIM_INFINITY ((unsigned int)0xffffffff)
#endif
 
int main()
{
	struct rlimit rl;
	rl.rlim_cur = 0; /* ソフトリミット */
	rl.rlim_max = 0; /* ハードリミット */
 
	/* 現在設定されている値を取得する */
	if( getrlimit( RLIMIT_NOFILE, &rl ) ){
		puts( "getrlimit error." );
		return 0;
	}
	printf( "before open_files:%d\n", rl.rlim_cur );
 
	/* 制限なし状態かチェック */
	if( rl.rlim_cur == RLIM_INFINITY ){
		printf( "infinity:%d\n", rl.rlim_cur );
	}
 
	/* 試しに新しい値をセットしてみる */
	rl.rlim_cur = 512;
	/*rl.rlim_cur = 2048;*/
	if( setrlimit( RLIMIT_NOFILE, &rl ) ){
		puts( "setrlimit error." );
		return 0;
	}
 
	/* さっき設定した値を取得する */
	rl.rlim_cur = 0;
	getrlimit( RLIMIT_NOFILE, &rl );
	printf( "after open_files:%d\n", rl.rlim_cur );
	return 0;
}

他にもスタックだったりcoreファイルサイズだったり色々変更できる。
詳しくは Manpage of GETRLIMIT で。

あんまし使わないけど知ってると便利っすなー。