close(2) - wariua/manpages-ko GitHub Wiki

NAME

close - 파일 λ””μŠ€ν¬λ¦½ν„° λ‹«κΈ°

SYNOPSIS

#include <unistd.h>

int close(int fd);

DESCRIPTION

close()λŠ” 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό λ‹«μ•„μ„œ 더 이상 μ–΄λ–€ νŒŒμΌλ„ 가리킀지 μ•ŠμœΌλ©° μž¬μ‚¬μš©ν•  수 있게 λ§Œλ“ λ‹€. μ—°κ³„λœ νŒŒμΌμ— λ ˆμ½”λ“œ 락(fcntl(2) μ°Έκ³ )이 작힌 게 있고 κ·Έ ν”„λ‘œμ„ΈμŠ€ μ†Œμœ μ΄λ©΄ (κ·Έ 락을 μ–»λŠ” 데 μ–΄λ–€ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό μΌλŠ”μ§€ 상관없이) κ·Έ 락을 μ œκ±°ν•œλ‹€.

fdκ°€ ν•˜μœ„ μ—΄λ¦° 파일 기술 ν•­λͺ©(open(2) μ°Έκ³ )을 κ°€λ¦¬ν‚€λŠ” λ§ˆμ§€λ§‰ 파일 λ””μŠ€ν¬λ¦½ν„°μ΄λ©΄ κ·Έ μ—΄λ¦° 파일 기술 ν•­λͺ© κ΄€λ ¨ μžμ›λ“€μ΄ ν•΄μ œλœλ‹€. 또 κ·Έ 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ unlink(2)둜 제거된 νŒŒμΌμ— λŒ€ν•œ λ§ˆμ§€λ§‰ 참쑰이면 파일이 μ‚­μ œλœλ‹€.

RETURN VALUE

성곡 μ‹œ close()κ°€ 0을 λ°˜ν™˜ν•œλ‹€. 였λ₯˜ μ‹œ -1을 λ°˜ν™˜ν•˜λ©° errnoλ₯Ό 적절히 μ„€μ •ν•œλ‹€.

ERRORS

EBADF
fdκ°€ μœ νš¨ν•œ μ—΄λ¦° 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ μ•„λ‹ˆλ‹€.
EINTR
close() 호좜이 μ‹œκ·Έλ„μ— μ˜ν•΄ μ€‘λ‹¨λ˜μ—ˆλ‹€. signal(7) μ°Έκ³ .
EIO
I/O 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€.
ENOSPC, EDQUOT
NFSμ—μ„œλŠ” 이 였λ₯˜λ“€μ΄ κ°€μš© μ €μž₯ 곡간을 μ΄ˆκ³Όν•˜λŠ” 첫 번째 μ“°κΈ°μ—μ„œ μ •μƒμ μœΌλ‘œ λ³΄κ³ λ˜μ§€ μ•Šκ³  μ΄ν›„μ˜ write(2), fsync(2), close()μ—μ„œ λ³΄κ³ λœλ‹€.

였λ₯˜ μ‹œ close()λ₯Ό μž¬μ‹œλ„ν•˜μ§€ 말아야 ν•˜λŠ” μ΄μœ μ— λŒ€ν•œ NOTES의 μ„€λͺ…을 보라.

CONFORMING TO

POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

NOTES

닫기에 μ„±κ³΅ν–ˆλ‹€λŠ” 게 데이터가 μ„±κ³΅μ μœΌλ‘œ λ””μŠ€ν¬μ— μ €μž₯λλ‹€λŠ” κ±Έ 보μž₯ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. μ»€λ„μ—μ„œ 버퍼 μΊμ‹œλ₯Ό μ¨μ„œ μ“°κΈ°λ₯Ό μ—°κΈ°ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 일반적으둜 파일 μ‹œμŠ€ν…œμ—μ„œλŠ” 파일이 λ‹«νž λ•Œ 버퍼λ₯Ό ν”ŒλŸ¬μ‹œ ν•˜μ§€ μ•ŠλŠ”λ‹€. 기반 λ””μŠ€ν¬μ— 데이터가 물리적으둜 μ €μž₯되게 ν•΄μ•Ό ν•œλ‹€λ©΄ fsync(2)λ₯Ό 써라. (κ·Έ λ‹€μŒλΆ€ν„°λŠ” λ””μŠ€ν¬ ν•˜λ“œμ›¨μ–΄μ—κ²Œ 달렸닀.)

'execμ—μ„œ λ‹«κΈ°' 파일 λ””μŠ€ν¬λ¦½ν„° ν”Œλž˜κ·Έλ₯Ό μ“°λ©΄ execve(2) 성곡 μ‹œ 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ μžλ™μœΌλ‘œ λ‹«νžˆλ„λ‘ ν•  수 μžˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ fcntl(2) μ°Έκ³ .

κ·Έ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 같은 ν”„λ‘œμ„ΈμŠ€μ˜ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ μ‹œμŠ€ν…œ 호좜둜 μ‚¬μš© 쀑일 μˆ˜λ„ μžˆμ„ λ™μ•ˆμ— λ‹«λŠ” 건 그리 ν˜„λͺ…ν•œ 일이 μ•„λ‹ˆλ‹€. 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ μž¬μ‚¬μš©λ  μˆ˜λ„ 있기 λ•Œλ¬Έμ— μ˜λ„μΉ˜ μ•Šμ€ λΆ€μž‘μš©μ„ μœ λ°œν•˜λŠ” μž‘μ•„λ‚΄κΈ° νž˜λ“  경쟁 쑰건이 μžˆμ„ 수 μžˆλ‹€.

close()의 였λ₯˜ λ°˜ν™˜ 닀루기

μ„Έμ‹¬ν•œ ν”„λ‘œκ·Έλž˜λ¨ΈλΌλ©΄ close()의 λ°˜ν™˜ 값을 확인할 것이닀. μ•žμ„  write(2) λ™μž‘μ—μ„œμ˜ 였λ₯˜κ°€ μ—΄λ¦° 파일 기술 ν•­λͺ©μ„ ν•΄μ œν•˜λŠ” λ§ˆμ§€λ§‰ close()μ—μ„œλ§Œ λ³΄κ³ λ˜λŠ” 일도 μΆ©λΆ„νžˆ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. νŒŒμΌμ„ 닫을 λ•Œ λ°˜ν™˜ κ°’ 검사λ₯Ό ν•˜μ§€ μ•ŠλŠ” 게 μ‘°μš©ν•œ 데이터 μœ μ‹€λ‘œ μ΄μ–΄μ§ˆ μˆ˜λ„ μžˆλ‹€. 특히 NFS와 λ””μŠ€ν¬ μΏΌν„°μ—μ„œ 이런 경우λ₯Ό λ³Ό 수 μžˆλ‹€.

단, μ‹€νŒ¨ λ°˜ν™˜ 값은 진단 μš©λ„(즉 미처리 I/Oκ°€ 아직 μžˆκ±°λ‚˜ μ‹€νŒ¨ν•œ I/Oκ°€ μžˆμ—ˆμ„ μˆ˜λ„ μžˆμŒμ„ μ‘μš©μ—κ²Œ μ•Œλ €μ£ΌκΈ°)λ‚˜ 보완 μš©λ„(κ°€λ Ή νŒŒμΌμ— ν•œ 번 더 μ“°κ±°λ‚˜ λ°±μ—… λ§Œλ“€κΈ°)둜만 μ“°λŠ” 게 μ’‹λ‹€.

μ‹€νŒ¨ λ°˜ν™˜ 후에 close()λ₯Ό μž¬μ‹œλ„ν•˜λŠ” 건 λ°”λžŒμ§ν•˜μ§€ λͺ»ν•œ 처리 방식이닀. λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ μž¬μ‚¬μš©λœ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό λ‹«νžˆκ²Œ ν•  μˆ˜λ„ 있기 λ•Œλ¬Έμ΄λ‹€. λ¦¬λˆ…μŠ€ μ»€λ„μ—μ„œλŠ” λ‹«κΈ° λ™μž‘ μ΄ˆλ°˜μ—μ„œ 항상 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό ν•΄μ œν•˜μ—¬ μž¬μ‚¬μš© 될 수 있게 λ§Œλ“€κΈ° λ•Œλ¬Έμ— 그런 일이 생길 수 μžˆλ‹€. 파일 μ‹œμŠ€ν…œμ΄λ‚˜ μž₯치둜 데이터λ₯Ό ν”ŒλŸ¬μ‹œ ν•˜λŠ” κ²ƒμ²˜λŸΌ 였λ₯˜λ₯Ό λ°˜ν™˜ν•  수 μžˆλŠ” 단계듀은 λ‹«κΈ° λ™μž‘ ν›„λ°˜μ—μ„œ 이뀄진닀.

μ—¬λŸ¬ λ‹€λ₯Έ κ΅¬ν˜„λ“€μ—μ„œλ„ λ§ˆμ°¬κ°€μ§€λ‘œ 이후 close() λ°˜ν™˜μ—μ„œ 였λ₯˜λ₯Ό λ³΄κ³ ν•˜λ”λΌλ„ (파일 λ””μŠ€ν¬λ¦½ν„°κ°€ μœ νš¨ν•˜μ§€ μ•Šλ‹€λŠ” 뜻인 EBADF 경우λ₯Ό μ œμ™Έν•˜κ³ ) 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 항상 λ‹«λŠ”λ‹€. POSIX.1μ—μ„œλŠ” ν˜„μž¬ 이 점에 λŒ€ν•΄ 아무 언급이 μ—†μ§€λ§Œ ν‘œμ€€ λ‹€μŒ μ£Ό 릴리슀 λ•Œ 이 λ™μž‘μ„ κ°•μ œν™”ν•  κ³„νšμ΄ μžˆλ‹€.

I/O 였λ₯˜μ— λŒ€ν•΄ μ•Œκ³  싢은 μ„Έμ‹¬ν•œ ν”„λ‘œκ·Έλž˜λ¨ΈλΌλ©΄ close() 전에 fsync(2) ν˜ΈμΆœμ„ ν•  수 μžˆλ‹€.

EINTR 였λ₯˜λŠ” λ‹€μ†Œ νŠΉλ³„ν•œ κ²½μš°λ‹€. EINTR 였λ₯˜μ™€ κ΄€λ ¨ν•΄ POSIX-1.2013μ—μ„œλŠ” λ‹€μŒκ³Ό 같이 λ§ν•œλ‹€.

작게 돼 μžˆλŠ” μ‹œκ·Έλ„μ— μ˜ν•΄ close()κ°€ μ€‘λ‹¨λ˜λŠ” 경우 errnoλ₯Ό EINTR둜 μ„€μ •ν•΄μ„œ -1을 λ°˜ν™˜ν•΄μ•Ό ν•˜λ©° fildes의 μƒνƒœλŠ” λͺ…μ„Έλ˜μ–΄ μžˆμ§€ μ•Šλ‹€.

μ΄λŠ” λ¦¬λˆ…μŠ€μ™€ 기타 μ—¬λŸ¬ κ΅¬ν˜„μ—μ„œ μ΄λ€„μ§€λŠ”, close()μ—μ„œ λ³΄κ³ ν•˜λŠ” λ‹€λ₯Έ 였λ₯˜λ“€κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ λ‹«νžŒλ‹€κ³  보μž₯λ˜λŠ” λ™μž‘ 방식을 ν—ˆμš©ν•œλ‹€. ν•˜μ§€λ§Œ μ΄λŠ” λ‹€λ₯Έ κ°€λŠ₯μ„± λ˜ν•œ ν—ˆμš©ν•œλ‹€. 즉 κ΅¬ν˜„μ—μ„œ EINTR 였λ₯˜λ₯Ό λ°˜ν™˜ν•˜λ©΄μ„œ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 계속 μ—΄μ–΄ λ‘˜ μˆ˜λ„ μžˆλ‹€. (λ¬Έμ„œμ— λ”°λ₯΄λ©΄ HP-UX의 close()μ—μ„œ μ΄λ ‡κ²Œ ν•œλ‹€.) 그러면 ν˜ΈμΆœμžλŠ” 파일 λ””μŠ€ν¬λ¦½ν„° λˆ„μΆœμ„ 막기 μœ„ν•΄ ν•œ 번 더 close()λ₯Ό μ¨μ„œ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό λ‹«μ•„μ•Ό ν•œλ‹€. μ΄λŸ¬ν•œ κ΅¬ν˜„ λ™μž‘ λ°©μ‹μ˜ μ°¨μ΄λŠ” 이식 κ°€λŠ₯ν•œ μ‘μš©μ— μ–΄λ €μš΄ μž₯애물이 λœλ‹€. λ§Žμ€ κ΅¬ν˜„μ—μ„œλŠ” EINTR 였λ₯˜ 후에 close()λ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•΄μ„  μ•ˆ λ˜μ§€λ§Œ 적어도 ν•œ κ΅¬ν˜„μ—μ„œλŠ” close()λ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ” 것이닀. POSIX.1 ν‘œμ€€ λ‹€μŒ μ£Ό λ¦΄λ¦¬μŠ€μ—μ„œ 이 λ‚œμ œλ₯Ό λ‹€λ£¨λ €λŠ” κ³„νšμ΄ μžˆλ‹€.

SEE ALSO

fcntl(2), fsync(2), open(2), shutdown(2), unlink(2), fclose(3)


2017-09-15

⚠️ **GitHub.com Fallback** ⚠️