2012-04-04 9 views
0

次のコードで:BSIMでRLIMIT_NOFILEのrlim_maxが-1になるのはなぜですか?

139  struct rlimit limit; 
140 
141  method = "rlimit"; 
142  if (getrlimit(RLIMIT_NOFILE, &limit) < 0) { 
143  perror("calling getrlimit"); 
144  exit(1); 
145  } 
146 
147  /* set the current to the maximum or specified value */ 
148  if (max_desired_fds) 
149  limit.rlim_cur = max_desired_fds; 
150  else { 
151   limit.rlim_cur = limit.rlim_max; 
152  } 
153 
154  if (setrlimit(RLIMIT_NOFILE, &limit) < 0) { 
155  perror("calling setrlimit"); 
156  exit(1); 
157  } 

はsetrlimitラインは、(私は "はsetrlimitを呼び出す" エラーが出る)が失敗しました。さらに調査したところ、limit.rlim_maxは-1であり、有効な値ではありません。これはなぜでしょうか?これはMac OSX上にあります。

答えて

1

setrlimitが失敗した場合は、rlim_curOPEN_MAXに設定してもう一度試してください。たとえば、http://source.winehq.org/source/libs/wine/loader.c#L653を参照してください。 Leopardに言及するコメントは、Leopardが最初にその動作を導入したことを意味します。

ETA:setrlimit(2) man pageの互換性に関する注記を参照してください。

関連する問題