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 で。

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