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 で。
あんまし使わないけど知ってると便利っすなー。






