LSEEK(2)

이름
lseek - 읽기/쓰기 파일 변위(offset)을 재배치한다.

사용법
#include <sys/types.h>
#include <unistd.h>

off_t lseek(int fildes, off_t offset, int whence);

설명
lseek 함수는 파일 기술자 fildes 의 변위를 다음과 같이 지시어 whence 에 따라 인자 offset 으로 재배치한다:

SEEK_SET
    변위은 offset 바이트로 설정한다.

SEEK_CUR
    변위는 현재 위치 더하기 offset 바이트로 설정한다.

SEEK_END
    변위는 파일 크기 더하기 offset 바이트로 설정한다.

lseek 함수는 파일의 변위를 파일의 끝에 존재하는 끝 넘어로 설정할수 있다. 만일 데이터가 이 시점에서 나중에 쓰여진다면, 그 사이에 연속적으로 읽은 데이터는 0 바이트들을 반환한다.(데이터가 실제로 그 사이에 쓰여질때까지. )

반환값
성공시, lseek 는 파일 시작에서 바이트로 측정된 것처럼 결과 변위 위치를 반환한다. 그렇지 않으면, (off_t)-1 의 값이 반환되며 errno 는 에러를 가리키도록 설정된다.

에러

EBADF
    Fildes 가 열려진 파일 기술자가 아니다.

ESPIPE
    Fildes 가 pipe, socket 또는 FIFO와 관련되어 있다.

EINVAL
    Whence 가 적당한 값이 아니다.

호환
SVr4, POSIX, BSD 4.3

RESTRICTIONS
몇몇 장치들은 이동이 불가능하며 POSIX는 지원되어야 하는 장치들을 지정하지 않았다. 리눅스 특정 제한들: tty 장치에서 lseek의 사용은 ESPIPE 를 반환한다. 다른 시스템들은 쓰여진 문자수를 반환하며 SEEK_SET을 카운터로 설정하여 사용한다. 몇몇 장치들, 즉 /dev/null 는 ESPIPE 에러를 야기하지 않지만 값이 정의되지 않은 포인터를 반환한다.

주의
whence 의 문서 사용은 잘못된 영어이지만, 역사적 이유때문에 유지된다. 예전 코드로 바꿀때, whence 값들을 다음 매크로로 대신해라:

old | new
0 | SEEK_SET
1 | SEEK_CUR
2 | SEEK_END
L_SET | SEEK_SET
L_INCR | SEEK_CUR
L_XTND | SEEK_END

SVR1-3 는 off_t 대신에 long 를 반환하며, BSD 는 int 를 반환한다.

관련 항목
dup(2), open(2), fseek(3)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 9월 16일