2012-09-25 1 views
1

Linux 파일 디스크립터의 "값"은 열린 파일의 제한보다 항상 작습니까?Linux 파일 디스크립터의 값은 항상 열린 파일 제한보다 작습니까?

이론적으로 시스템은 닫힌 파일 설명 자의 ID 값을 다시 사용해야합니다. 그리고 하나의 프로세스에서 1021 개의 파일을 연 후에 파일 설명자 값을 0,1,2에서 1023까지 가져와야합니다. 다른 파일을 열려면 close으로 파일 설명자를 릴리스해야하며 open을 다시 호출 할 때 시스템은이 릴리스 된 ID를 다시 사용합니다. 이 경우 파일 디스크립터의 최대 정수 값은 1023이어야한다. 그 맞습니까 ?

열린 파일 제한을 ulimit -n, setrlimit/proc/sys/fs/file-max으로 변경할 수 있다는 것을 알고 있습니다. 오픈 파일 제한을 setrlimit으로 줄이면 열린 소켓 파일 설명자를 char 변수와 함께 저장할 수 있는지 여부를 알고 싶습니다.

답변

3

예, 값은 getrlimit()에서 반환 한 현재 제한보다 0에서 1까지의 범위로 제한됩니다.

RLIMIT_NOFILE 
      Specifies a value one greater than the maximum file descriptor number 
      that can be opened by this process. Attempts (open(2), pipe(2), 
      dup(2), etc.) to exceed this limit yield the error EMFILE. 
      (Historically, this limit was named RLIMIT_OFILE on BSD.) 

From the Open Group Base Specification:

RLIMIT_NOFILE
이 시스템은 새로 생성 된 디스크립터를 할당 할 수있는 최대 값보다 큰 수이다

From the getrlimit() man page:

. 이 제한이 을 초과하면 errno를 [EMFILE]로 설정하여 파일 설명자를 할당하는 함수가 실패합니다. 이 제한은 프로세스가 할당 할 수있는 파일 수인 수를 제한합니다.

+0

감사합니다. 내 컴퓨터의 getrlimit() 매뉴얼 페이지는 "RLIMIT_NOFILE :이 프로세스의 최대 열린 파일 수"라고 말합니다. – RichardLiu