新着情報TOP > lseek 예제

lseek 예제

lseek()는 파일 오프셋을 파일 끝을 넘어 배치할 수 있지만 이 함수자체는 파일 크기를 확장하지 않습니다. IEEE Std 1003.1-2001의 유일한 함수는 파일의 크기를 직접 확장할 수 있는 경우 쓰기(), truncate(및 ftruncate))이지만, 원래 ISO C 표준에서 파생된 여러 함수(예: fwrite(), fprintf() 등(호출을 유발하여) 쓰기())를 입력합니다. 파일 I/O에 사용할 수 있는 함수를 설명하여 유닉스 시스템에 대한 논의를 시작하고 파일을 열고, 파일을 읽고, 파일을 작성하는 등의 기능을 설명하겠습니다. 대부분의 유닉스 파일 I/O는 열기, 읽기, 쓰기, lseek 및 닫기의 다섯 가지 함수만 사용하여 수행할 수 있습니다. 그런 다음 읽기 및 쓰기 함수에 대한 서로 다른 버퍼 크기의 영향을 검사합니다. [EINVAL]을 반환하는 잘못된 파일 오프셋은 구현 정의 및 장치 종속일 수 있습니다(예: 메모리에 잘못된 값이 거의 없을 수 있음). 음수 파일 오프셋은 일부 구현에서 일부 장치에 유효할 수 있습니다. lseek() 함수는 운영 체제 수준에서 현재 파일 위치를 설정합니다. 이 파일은 creat(), dup(), dup2(), fcntl(), open() 또는 sopen() 함수 중 하나를 성공적으로 실행하여 반환되는 파일 설명자 제출을 사용하여 참조됩니다. 오프셋 값은 인수 시간 값에 의해 결정된 파일 위치에서 상대 오프셋으로 사용됩니다. lseek() 함수는 그 자체로 파일의 크기를 확장해서는 안 됩니다. 리눅스 특정 제한 사항: tty 장치에서 lseek()를 사용하면 ESPIPE를 반환합니다.

주어진 파일 (예 : input.txt)에서 대체 nth 바이트를 읽고 “lseek”의 도움으로 다른 파일에 씁니다. lseek (C 시스템 호출): lseek 파일 설명자의 읽기/쓰기 포인터의 위치를 변경 하는 데 사용 되는 시스템 호출입니다. 위치는 절대 또는 상대적 용어로 설정할 수 있습니다. 함수 정의 이 예제의 함수는 레코드가 0으로 시작하여 번호가 매겨지고 rec_size에 레코드 구분 기호 문자를 포함하여 파일의 레코드 크기가 포함되어 있다고 가정합니다. lseek() 함수는 파일 오프셋을 파일의 기존 데이터의 끝을 넘어 설정할 수 있도록 허용해야 합니다. 나중에 이 시점에서 데이터를 작성하는 경우 간격에 있는 데이터의 후속 읽기는 데이터가 실제로 간격에 기록될 때까지 값 0을 사용하여 바이트를 반환합니다. POSIX.1-1990 표준은 lseek()가 음의 오프셋을 반환하는 것을 특별히 금지하지 않았습니다. 따라서 응용 프로그램은 호출 전에 errno를 지우고 반환 시 errno를 확인하여 (off_t)-1의 반환 값이 음의 오프셋인지 오류 조건의 표시인지 확인해야 했습니다.

표준 개발자는 준수 응용 프로그램의 부분에 이 작업을 요구하지 않았으며 결과 파일 오프셋이 일반 파일, 블록 특수 파일 또는 디렉터리에서 음수일 때 errno를 [EINVAL]으로 설정하도록 요구했습니다.