TRUNCATE(2)

이름
truncate, ftruncate - 지정된 길이로 파일을 자른다.

사용법
#include <unistd.h>

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

설명
Truncate는 path로 지정된 파일이나 fd로 참조되는 파일을 length 바이트 크기로 자른다. 만일 파일이 이 크기보다 크다면, 나머지 데이터는 잃는다. 만일 파일이 이 크기보다 작다면, 파일이 변화없이 그대로 일지 확장될 지는 알 수 없다. 후자의 경우 확장된 부분은 0으로 채워진다. ftruncate에서 파일은 쓰기 위해 열려져 있어야 한다.

반환값
성공시, 0이 리턴된다. 에러시, -1이 리턴되며, errno는 적당한 값으로 설정된다.

에러
truncate:

ENOTDIR
    경로 접두사 요소가 디렉토리가 아니다.

EINVAL
    경로 이름에 high-order 비트가 설정된 문자가 포함되있다 (올바른 ASCII 문자가 아니다).

ENAMETOOLONG
    경로 이름 요소가 255자를 넘었거나, 전체 경로 이름이 1023자를 넘었다.

ENOENT
    지정된 파일이 존재하지 않는다.

EACCES
    경로 접두사 요소에 대한 탐색 허가가 거부되었다.

EACCES
    지정된 파일을 사용자가 쓸 수 없다.

ELOOP
    경로를 찾아갈 때, 너무 많은 심볼릭 링크가 존재한다.

EISDIR
    지정된 파일이 디렉토리이다.

EROFS
    지정된 파일이 읽기 전용 파일 시스템에 있다.

ETXTBSY
    파일이 실행되고 있는 순수 절차 파일(공유된 텍스트)이다.

EIO inode 갱신 중에 I/O에러가 발생했다.

EFAULT
    Path가 프로세스에 할당된 영역 밖을 가리키고 있다.

ftruncate:

EBADF
    fd가 유효한 기술자가 아니다.

EINVAL
    fd가 파일이 아니라, 소켓을 가리키고 있다.

EINVAL
    fd가 쓰기 위해 열려있지 않다.

호환
4.4BSD, SVr4 (이 시스템 콜은 BSD 4.2에서 처음으로 나타났다). SVr4는 truncate 에러 조건인 EINTR, EMFILE, EMULTIHP, ENAMETOOLONG, ENFILE, ENOLINK, ENOTDIR을 추가적으로 기술한다. SVr4는 ftruncate 를 위한 EAGAIN 그리고 EINTR 에러 조건을 추가적으로 기술한다. POSIX에는 ftruncate는 있지만 truncate는 없다.

버그
이 시스템 콜은 파일에서 바이트의 영역을 버릴 수 있도록 일반화되어야 한다.

관련 항목
open(2)

역자
정강훈 <skyeyes@soback.kornet.net>, 5월 13일