tail head cat sleep
QR code linking to this page

Man page  — CLOSE

명칭

close – 기술자를 삭제한다

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <unistd.h>

int
close(int d);

해설

close() (은)는 프로세스의 오브젝트 참조 테이블에서 기술자를 삭제합니다. 이것이 그 오브젝트에의 마지막 참조였던 경우, 오브젝트는 액티브하지 않게 됩니다. 예를 들어, 파일에 대한 마지막 클로우즈로, 그 파일에 연결시킬 수 있었던 현재의 seek 포인터는 없어집니다. socket(2) 에 대한 마지막 클로우즈로, 그 소켓에 연결시킬 수 있었다 명명 정보와 기다리는 행렬내의 데이터는 파기됩니다. 문의형 락을 보관 유지하고 있다 파일에 대한 마지막 클로우즈로, 락은 해방됩니다 (자세한 것은 flock(2) (을)를 참조). 그러나, System V 와 IEEE Std 1003.1-88 ("POSIX.1") 그럼, 어느 프로세스가 파일에 대해서 보관 유지하고 있는 모든 fcntl(2) 문의형 레코드 락은, 그 파일에 대한 파일 기술자의 언젠가 하지만 그 프로세스에 의해 닫혀질 때 삭제된다, 라고 규정하고 있습니다.

프로세스가 종료할 때, 프로세스에 연결시킬 수 있었다 파일 기술자는 모두 해방됩니다. 그러나, 액티브한 기술자의 개수에는 프로세스 마다 제한이 있으므로, 대량의 파일 기술자를 처리할 때는, close() 함수 호출이 편리합니다.

프로세스가 포크 할 때 (fork(2) 참조), 새로운 child process의 기술자는 모두, 포크의 전에 parent process의 기술자가 참조하고 있던 것과 같은 오브젝트를 참조합니다. 다음에, 새로운 프로세스가 execve(2) 그리고 실행되는 경우, 그 프로세스는 통상 이러한 기술자를 계승합니다. 대부분의 기술자는 execve(2) 의 전에 dup2(2) 그리고 재배치되는지, close() 그리고 삭제됩니다. 만약 execve 가 실패했을 경우에 이러한 기술자가 필요하게 된다면, execve 가 성공했을 경우에게만, 그것들을 클로우즈 하도록(듯이) 할 필요가 있습니다. 이 때문에, "fcntl(d, F_SETFD, 1)" 호출이 준비되어 있습니다. 이것은 execve 가 성공한 다음에, 기술자를 닫도록(듯이) 지시합니다. "fcntl(d, F_SETFD, 0)" 호출은 이것을 디폴트에 되돌립니다. 디폴트에서는, 기술자는 클로우즈 되지 않습니다.

반환값

The close function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

에러

close() (은)는 다음의 경우에 실패합니다:
[EBADF]
  d 하지만 액티브한 기술자가 아닙니다.
[EINTR]
  세치기가 수신되었습니다.

관련 항목

accept(2), execve(2), fcntl(2), flock(2), open(2), pipe(2), socket(2), socketpair(2)

표준

close() 함수는 IEEE Std 1003.1-90 ("POSIX.1") 에 준거하고 있습니다.

역사

close() 함수는 AT&T v7 그리고 등장했습니다.

CLOSE (2) April 19, 1994

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

UNIX has been evolving feverishly for close to 30 years, sort of like bacteria in a cesspool — only not as attractive
— John Levine, "Unix for Dummies"