C + システムリソース設定
setrlimit(2), getrlimit(2) メモ。
コマンドラインから ulimit -n 1024 などとせず、プログラム上から設定するやつ。
limits.conf 以上の値を割り当てようとすると失敗するぽい。
サンプルソース
#include
#include
#include
#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 で。
あんまし使わないけど知ってると便利っすなー。