_llseek()함수에 대해서 질문 있습니다...
llseek()에 대해서 man page에서 검색을 해보면
아래와 같이 설명하고 있습니다...
근데, 제가 7zip이라는 압축프로그램을 압축하면서 strace를 실행 해 보면,
_llseek(3, 36, [36],SEEK_SET) = 0
_llseek(3, 0, [71],SEEK_CUR) = 0
등과 같이 llseek()를 사용하고 있습니다...
인자로써 [36],[0],[71]과 같은것을 처음 보고...
매개 변수의 갯수가 틀리다보니..같은 함수인지도 정확히 잘 모르겠습니다..
우분투 8.10을 사용하고 있구요..
최종적으로는 7zip의 쓰기 패턴을 알려고 소스를 분석하려고 하구요..
분석하기에 앞서 런타임에서 어떻게 쓰기 패턴이 이루어 지는지 먼저 확인하려고 strace를 사용 하였습니다.
///////////////////////////////////////////////////////////////////////////////////////////////////
NAME
_llseek - 읽기/쓰기 파일 변위(offset)을 재배치한다.
SYNOPSIS
#include
#include
_syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo, loff_t *, res, uint, wh);
int _llseek(unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t * result, unsigned int whence);
DESCRIPT-xION
_llseek 함수는 파일 시작 혹은 whence 가 SEEK_SET, SEEK_CUR, SEEK_END, 에 각각 영향을 받는 파일의 끝부분과 관련된 (offset_high<<32) | offset_low 바이트에 파일 디스크립터 fd 의 변위(offset)를 재배치한다. 인수 result 에 결과 파일 위치를 반환한다.
RETURN VALUE
성공시 _llseek 는 0을 반환한다. 그 외에는 -1을 반환하고 errno 는 에러를 지정하기 위해 설정된다.
ERRORS
EBADF
fd 는 파일열기 디스크립터가 아니다.
EINVAL
whence 는 유효하지 않다.
댓글 달기