lseek64 예제

lseek64 예제

이 예제의 read_record() 함수는 레코드가 0으로 시작하여 번호가 매겨지고 rec_size에 레코드 구분 기호 문자를 포함하여 파일의 레코드 크기가 포함되어 있다고 가정합니다. 네 개의 인터페이스를 사용할 수 있습니다: lseek (2), lseek64(), llseek (2), 및 원시 시스템 호출 _llseek (2). 텍스트 모드 파일로 I/O를 수행할 때 read() 또는 write()의 반환 값은 파일 위치가 얼마나 변경되었는지 정확하게 나타내지 않습니다. 예를 들어 텍스트 모드 파일에 10바이트를 쓰면 줄 종료 문제로 인해 파일 위치가 10바이트 이상 변경될 수 있습니다. Windows의 텍스트 줄은 UNIX에서와 같이 줄 바전용이 아닌 캐리지 반환 줄 피드에서 끝납니다. off64_t lseek64 (int fd, off64_t 오프셋, int whens); lseek() 함수를 사용하면 현재 파일 위치(실제로 tell()가 이러한 방식으로 구현됩니다) 얻을 수 있습니다. 그런 다음 이 값을 lseek()라는 다른 호출과 함께 사용하여 파일 위치를 재설정할 수 있습니다. _lseek 함수는 fd와 연결된 파일 포인터를 원점에서 바이트를 오프셋하는 새 위치로 이동합니다. 파일의 다음 작업은 새 위치에서 발생합니다. 원본 인수는 Stdio.h에 정의된 다음 상수 중 하나여야 합니다. 파일의 모든 레코드가 크기가 같으면 n번째 레코드의 위치를 다음과 같이 계산하고 읽을 수 있습니다. lseek()의 사용에 관계없이. _lseek를 사용하여 파일의 아무 곳이나 파일의 끝 을 넘어 포인터의 위치를 재배치 할 수 있습니다.

#define _LARGEFILE64_SOURCE /* 참조 feature_test_macros (7) */ #include #include 리눅스에서, 사용 하 여 lseek() 터미널 장치에서 오류 ESPIPE실패. 이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 _doserno, errno, _sys_errlist 및 _sys_nerr를 참조하십시오. 에서 SEEK_DATA 및 SEEK_HOLE의 정의를 얻으려면 _GNU_SOURCE 기능 테스트 매크로를 정의해야 합니다.