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.