read()
특정 위치에서 파일 생성을 시작하고 싶습니다 . 읽기 시작해야 할 줄 수는 알고 있지만 read()는 줄을 인수로 사용하지 않으며 위치로 바이트가 필요합니다.
어떤 줄부터 읽기 시작할지 알고 있다면 어디서부터 읽기 시작할지 계산하는 데 사용할 수 있는 방법이 있나요?
답변1
어떤 트릭도 있을 수 없습니다. 파일에서 바이트가 시작되는 위치를 계산할 수 있으므로 바이트 건너뛰기는 쉽습니다. 그러나 각 문자가 개행 문자인지 여부를 확인하지 않고는 가변 길이 행에 대한 계산을 수행할 수 없습니다.
책을 상상해 보세요. 42페이지를 찾고 싶을 때, 보지 않고도 42페이지까지 셀 수 있습니다. 명확한 페이지 두께를 위해 눈금자를 사용하여 42페이지의 위치를 측정할 수도 있습니다. 하지만 5장을 찾으려면 모든 페이지를 살펴보며 새 장이 시작되는 위치를 확인해야 합니다.
파일에는 줄 인덱스가 없으므로 일부 줄 건너뛰기 구현을 사용하더라도 줄을 찾기 위해 바이트 단위로 읽는 것 외에는 표면 뒤에 기회가 없으므로 read
모든 줄을 삭제하고 원하는 줄을 제거 할 수도 있습니다. 건너뛰다.
답변2
모든 바이트를 읽고 바이트 10()의 발생 횟수를 계산합니다 \n
. 그것은N바로 뒤에 th가 나타납니다.N+1줄.
불행하게도 이것은 트릭이 아니며 단지 유일한 방법일 뿐입니다.
거기예 레코드 지향 파일 시스템행별 직접 조회를 허용하는 일부 플랫폼(예:가상 관리 시스템에서그리고운영 체제), 그러나 이러한 파일 시스템은 두 플랫폼 모두에서 일반적이지 않습니다. Unix와 POSIX는 파일을 바이트 스트림으로 취급하며 자체적으로 이러한 기반에 대한 추가 추상화를 제공하지 않습니다.