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

NAME

truncate, ftruncate - νŒŒμΌμ„ μ§€μ •ν•œ 길이둜 μ ˆλ‹¨ν•˜κΈ°

SYNOPSIS

#include <unistd.h>
#include <sys/types.h>

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);

glibc κΈ°λŠ₯ 확인 맀크둜 μš”κ±΄ (feature_test_macros(7) μ°Έκ³ ):

truncate():
_XOPEN_SOURCE >= 500
|| /* glibc 2.12λΆ€ν„°: */ _POSIX_C_SOURCE >= 200809L
|| /* glibc 버전 <= 2.19: */ _BSD_SOURCE
ftruncate():
_XOPEN_SOURCE >= 500
|| /* glibc 2.3.5λΆ€ν„°: */ _POSIX_C_SOURCE >= 200112L
|| /* glibc 버전 <= 2.19: */ _BSD_SOURCE

DESCRIPTION

truncate() 및 ftruncate() ν•¨μˆ˜λŠ” pathκ°€ μ§€λͺ…ν•˜κ±°λ‚˜ fdκ°€ κ°€λ¦¬ν‚€λŠ” μ •κ·œ νŒŒμΌμ„ μ •ν™•νžˆ length λ°”μ΄νŠΈ 크기가 되게 ν•œλ‹€.

파일이 μ›λž˜ κ·Έ 크기보닀 컸으면 λ’€μͺ½ 데이터λ₯Ό μžƒκ²Œ λœλ‹€. 파일이 μ›λž˜ κ·Έ 크기보닀 μž‘μ•˜μœΌλ©΄ ν™•μž₯되며, ν™•μž₯된 뢀뢄을 읽으면 널 λ°”μ΄νŠΈ('\0')κ°€ λ‚˜μ˜¨λ‹€.

파일 μ˜€ν”„μ…‹μ€ λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

크기가 λ°”λ€Œμ—ˆμœΌλ©΄ 파일의 st_ctime 및 st_mtime ν•„λ“œ(각각 졜근 μƒνƒœ λ³€κ²½ μ‹œκ°„ 및 졜근 μˆ˜μ • μ‹œκ°„. inode(7) μ°Έκ³ )κ°€ κ°±μ‹ λ˜λ©°, λͺ¨λ“œ λΉ„νŠΈ set-user-ID 및 set-group-IDκ°€ μ§€μ›Œμ§ˆ 수 μžˆλ‹€.

ftruncate()μ—μ„œλŠ” 파일이 μ“°κΈ° κ°€λŠ₯ν•˜κ²Œ μ—΄λ € μžˆμ–΄μ•Ό ν•œλ‹€. truncate()μ—μ„œλŠ” 파일이 μ“°κΈ° κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.

RETURN VALUE

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

ERRORS

truncate():

EACCES
경둜 μ„ λ‘λΆ€μ˜ μ–΄λŠ μš”μ†Œμ— λŒ€ν•΄ 탐색 κΆŒν•œμ΄ κ±°λΆ€λ˜μ—ˆλ‹€. λ˜λŠ” μ§€μ •ν•œ 파일이 μ‚¬μš©μžμ—κ²Œ μ“°κΈ° κ°€λŠ₯ν•˜μ§€ μ•Šλ‹€. (path_resolution(7)도 μ°Έκ³ .)
EFAULT
path μΈμžκ°€ ν”„λ‘œμ„ΈμŠ€μ— ν• λ‹Ήλœ μ£Όμ†Œ 곡간 밖을 가리킀고 μžˆλ‹€.
EFBIG
length μΈμžκ°€ μ΅œλŒ€ 파일 크기보닀 크닀. (XSI)
EINTR
λλ‚˜κΈ°λ₯Ό 기닀리며 블둝돼 μžˆλŠ” λ™μ•ˆ 호좜이 μ‹œκ·Έλ„ ν•Έλ“€λŸ¬μ— μ˜ν•΄ μ€‘λ‹¨λ˜μ—ˆλ‹€. fcntl(2) 및 signal(7) μ°Έκ³ .
EINVAL
length μΈμžκ°€ μŒμˆ˜μ΄κ±°λ‚˜ μ΅œλŒ€ 파일 크기보닀 크닀.
EIO
μ•„μ΄λ…Έλ“œ κ°±μ‹  쀑 I/O 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€.
EISDIR
μ§€μ •ν•œ 파일이 디렉터리이닀.
ELOOP
경둜λͺ…을 λ³€ν™˜ν•˜λŠ” λ™μ•ˆ λ„ˆλ¬΄ λ§Žμ€ 심볼릭 링크λ₯Ό λ§Œλ‚¬λ‹€.
ENAMETOOLONG
경둜λͺ…μ˜ μ–΄λŠ μš”μ†Œκ°€ 255κΈ€μžλ₯Ό λ„˜μ—ˆλ‹€. λ˜λŠ” 전체 경둜λͺ…이 1023κΈ€μžλ₯Ό λ„˜μ—ˆλ‹€.
ENOENT
μ§€μ •ν•œ 파일이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
ENOTDIR
경둜 μ„ λ‘λΆ€μ˜ ν•œ μš”μ†Œκ°€ 디렉터리가 μ•„λ‹ˆλ‹€.
EPERM
ν•˜μœ„ 파일 μ‹œμŠ€ν…œμ—μ„œ ν˜„μž¬ 크기 λ„˜κ²Œ νŒŒμΌμ„ ν™•μž₯ν•˜λŠ” κ±Έ μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.
EPERM
파일 봉인 λ•Œλ¬Έμ— λ™μž‘μ΄ λ§‰ν˜”λ‹€. fcntl(2) μ°Έκ³ .
EROFS
μ§€μ •ν•œ 파일이 읽기 μ „μš© 파일 μ‹œμŠ€ν…œμ— μœ„μΉ˜ν•΄ μžˆλ‹€.
ETXTBSY
파일이 μ‹€ν–‰ 파일인데 ν˜„μž¬ μ‹€ν–‰ 쀑이닀.

같은 였λ₯˜λ“€μ΄ ftruncate()에도 ν•΄λ‹Ήν•˜λ˜ pathμ—μ„œ λ­”κ°€ 잘λͺ»λ  수 μžˆλŠ” λŒ€μ‹  파일 λ””μŠ€ν¬λ¦½ν„° fdμ—μ„œ λ­”κ°€ 잘λͺ»λ  수 μžˆλ‹€.

EBADF
fdκ°€ μœ νš¨ν•œ 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ μ•„λ‹ˆλ‹€.
EBADF λ˜λŠ” EINVAL
fdκ°€ μ“°κΈ° κ°€λŠ₯ν•˜κ²Œ μ—΄λ € μžˆμ§€ μ•Šλ‹€.
EINVAL
fdκ°€ μ •κ·œ νŒŒμΌμ΄λ‚˜ POSIX 곡유 λ©”λͺ¨λ¦¬ 객체λ₯Ό 가리킀고 μžˆμ§€ μ•Šλ‹€.
EINVAL λ˜λŠ” EBADF
파일 λ””μŠ€ν¬λ¦½ν„° fdκ°€ μ“°κΈ° κ°€λŠ₯ν•˜κ²Œ μ—΄λ € μžˆμ§€ μ•Šλ‹€. POSIXμ—μ„œλŠ” 이 κ²½μš°μ— μ–΄λŠ μͺ½ 였λ₯˜λ„ ν—ˆμš©ν•˜λ©°, 이식 κ°€λŠ₯ν•œ μ‘μš©μ—μ„œλŠ” 두 였λ₯˜λ₯Ό λͺ¨λ‘ μ²˜λ¦¬ν•˜λŠ” 게 μ’‹λ‹€. (λ¦¬λˆ…μŠ€μ—μ„œλŠ” EINVAL을 λ‚΄λ†“λŠ”λ‹€.)

CONFORMING TO

POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4. (4.2BSDμ—μ„œ 이 ν˜ΈμΆœλ“€μ΄ 처음 λ“±μž₯ν–ˆλ‹€.)

NOTES

POSIX 곡유 λ©”λͺ¨λ¦¬ 객체의 크기λ₯Ό μ„€μ •ν•˜λŠ” 데에도 ftruncate()λ₯Ό μ“Έ 수 μžˆλ‹€. shm_open(3) μ°Έκ³ .

DESCRIPTION의 μ„ΈλΆ€ λ‚΄μš©λ“€μ€ XSI μ€€μˆ˜ μ‹œμŠ€ν…œμ— λŒ€ν•œ 것이닀. XSI λΉ„μ€€μˆ˜ μ‹œμŠ€ν…œμ˜ 경우, POSIX ν‘œμ€€μ—μ„œλŠ” lengthκ°€ 파일 길이λ₯Ό μ΄ˆκ³Όν•  λ•Œ ftruncate()의 λ™μž‘ λ°©μ‹μœΌλ‘œ 두 κ°€μ§€λ₯Ό ν—ˆμš©ν•˜λŠ”λ° (참고둜 그런 μƒν™©μ—μ„œ truncate()에 λŒ€ν•΄μ„  아무것도 λͺ…세돼 μžˆμ§€ μ•Šλ‹€), 였λ₯˜λ₯Ό λ°˜ν™˜ν•  μˆ˜λ„ 있고, νŒŒμΌμ„ ν™•μž₯ν•  μˆ˜λ„ μžˆλ‹€. λŒ€λ‹€μˆ˜ μœ λ‹‰μŠ€ μ‹œμŠ€ν…œκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ λ¦¬λˆ…μŠ€μ—μ„œλŠ” 자체 파일 μ‹œμŠ€ν…œμ„ λ‹€λ£° λ•Œ XSI μš”κ΅¬ 사항을 λ”°λ₯Έλ‹€. ν•˜μ§€λ§Œ λͺ‡λͺ‡ μ™Έλž˜ 파일 μ‹œμŠ€ν…œμ—μ„œλŠ” truncate()와 ftruncate()λ₯Ό μ΄μš©ν•΄ νŒŒμΌμ„ ν˜„μž¬ 길이 λ„ˆλ¨Έλ‘œ ν™•μž₯ν•˜λŠ” κ±Έ ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. λ¦¬λˆ…μŠ€μ—μ„œ λˆˆμ— λ„λŠ” 예둜 VFAT이 μžˆλ‹€.

μ›λž˜μ˜ λ¦¬λˆ…μŠ€ truncate() 및 ftruncate() μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ 큰 파일 μ˜€ν”„μ…‹μ„ λ‹€λ£° 수 μžˆλ„λ‘ μ„€κ³„λ˜μ§€ μ•Šμ•˜λ‹€. κ·Έλž˜μ„œ λ¦¬λˆ…μŠ€ 2.4μ—μ„œ 큰 νŒŒμΌμ„ 닀루기 μœ„ν•œ truncate64() 및 ftruncate64()λ₯Ό μΆ”κ°€ν–ˆλ‹€. ν•˜μ§€λ§Œ glibc의 래퍼 ν•¨μˆ˜μ—μ„œ 투λͺ…ν•˜κ²Œ μ΅œμ‹  μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ΄μš©ν•˜κΈ° λ•Œλ¬Έμ— glibcλ₯Ό μ“°λŠ” μ‘μš©μ—μ„œλŠ” 이런 λ‚΄μš©μ„ λͺ¨λ₯΄κ³  μžˆμ–΄λ„ λœλ‹€.

syscall(2)μ—μ„œ μ„€λͺ…ν•˜λŠ” μ΄μœ λ“€ λ•Œλ¬Έμ— 일뢀 32λΉ„νŠΈ μ•„ν‚€ν…μ²˜μ—μ„œλŠ” 이 μ‹œμŠ€ν…œ ν˜ΈμΆœλ“€μ˜ 호좜 μ‹œκ·Έλ„ˆμ²˜κ°€ λ‹€λ₯΄λ‹€.

BUGS

glibc 2.12에 헀더 파일 버그가 μžˆμ–΄μ„œ ftruncate() 선언을 λ…ΈμΆœμ‹œν‚€κΈ° μœ„ν•΄ ν•„μš”ν•œ _POSIX_C_SOURCE μ΅œμ†Ÿκ°’μ΄ 200112Lκ°€ μ•„λ‹Œ 200809Lμ˜€λ‹€. 이후 glibc λ²„μ „λ“€μ—μ„œ κ³ μ³μ‘Œλ‹€.

SEE ALSO

truncate(1), open(2), stat(2), path_resolution(7)


2019-03-06

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