fgetpos/fsetpos와 ftell/fseeek의 차이점
기능을 사용하는 것과 다른 점은 무엇입니까?fgetpos()
그리고.fsetpos()
그리고 기능들을 사용합니다.ftell()
그리고.fseek()
파일에 위치를 지정할 수 있습니까?
무엇이fgetpos()
그리고.fsetpos()
에 좋습니까?왜 그것들이 대신 사용되었겠습니까?ftell()
그리고.fseek()
?
위의 답변 중 정답이 하나도 없습니다. 실제로 다음을 사용할 수 있습니다.fsetpos
와 바꿀 수 없는.fseek
보안 결함(https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=20087255) )을 도입할 수 있습니다.
그 이유는fpos_t *pos
에 대한 주장.fsetpos
실제로는 정수가 아니므로 파일에서 임의의 위치를 찾는 데 사용할 수 없습니다.따라서 유효한 값은 다음에서 얻은 값뿐입니다.fgetpos
의사들이 말했듯이,
스트림과 관련된 내부 파일 위치 표시기는 다음과 같은 위치로 설정됩니다.
pos
그것은 에 대한 포인터입니다.fpos_t
이전에 에 대한 호출에 의해 값이 획득되어야 하는 객체.
(http://www.cplusplus.com/reference/cstdio/fsetpos/)
32비트 경계를 넘어 임의의 위치를 찾는 기능만 있으면 다음을 사용합니다.ftello
/fseeko
로 컴파일합니다.#define _FILE_OFFSET_BITS 64
.
ftell과 fsek는 파일의 오프셋(위치)을 나타내기 위해 longint형을 사용하므로 longint로 표시할 수 있는 오프셋으로 제한될 수 있습니다. (type longint는 2**31-1보다 큰 값을 유지하는 것이 보장되지 않으며 최대 오프셋은 2GB로 제한됩니다.)반면에 최신 fgetpos 및 fsetpos 함수는 오프셋을 나타내기 위해 특수한 유형인 fpos_t를 사용합니다.이 형식 정의 뒤에 있는 유형은 적절하게 선택된 경우 임의로 큰 오프셋을 나타낼 수 있으므로 fgetpos 및 fsetpos를 임의로 큰 파일과 함께 사용할 수 있습니다.fgetpos 및 fsetpos는 멀티바이트 스트림과 관련된 상태도 기록합니다.
fgetpos()는 fsetpos()와 함께 사용됩니다.ftell()은 fsek()와 함께 사용됩니다.
fgetpos()는 둘 다 FILE* 매개 변수를 사용하고 둘 다 약간 다른 스타일이지만 파일에서 일종의 위치를 반환하기 때문에 실질적으로 ftell()과 유사합니다.그러나 다음과 같은 정보를 얻을 수 있습니다. Only fsek()를 사용하면 파일의 처음부터 현재 위치에서 검색하고 파일의 끝에서 뒤로 검색할 수 있습니다(세 번째 fsek() 인수는 SEEK_SET, SEEEK_CUR 및 SEEEK_END).fsetpos()는 이것을 하지 않습니다.fsetpos()는 fgetpos에서 얻은 어떤 위치로 돌아가는 것으로 제한됩니다.
예를 들어 파일을 메모리에 읽으려고 합니다.malloc()에서 얼마나 많은 힙이 필요합니까?파일의 크기가 필요합니다.그리고 일부 C 컴파일러는 비표준 함수를 추가할 수 있지만, C 표준 라이브러리에서 파일의 크기를 알려주는 기능을 아직 찾지 못했습니다.예를 들어, Borland Turbo C에는 파일 길이()가 있습니다.그러나 STANDARD C 라이브러리에서 파일 길이()를 본 적이 없습니다.
따라서 파일이 끝나기 전에 fseke()를 0바이트까지 사용할 수 있습니다.그런 다음 ftell()을 사용하여 위치를 바이트 단위로 가져오고 힙 메모리 양을 계산합니다.
파일 크기를 얻기 위해 무엇을 더 할 수 있습니까?fgetc()를 사용하여 각 문자를 읽고 끝까지 셀 수 있습니다.하지만 저는 fseke()와 ftell()을 사용하는 것이 더 좋고 쉽다고 생각합니다.
인터페이스는 다르게 정의되지만 기능에는 차이가 없습니다.둘 다 POSIX의 일부이기 때문에 둘 다 구현됩니다.
언급URL : https://stackoverflow.com/questions/3348637/what-is-difference-between-fgetpos-fsetpos-and-ftell-fseek
'it-source' 카테고리의 다른 글
잘못된 http_host 헤더 (0) | 2023.06.15 |
---|---|
레일 직렬화를 사용하여 해시를 데이터베이스에 저장 (0) | 2023.06.15 |
목록에서 여러 값의 구성원을 테스트하는 방법 (0) | 2023.06.15 |
오류 가져오기: '() => () => boolean' 유형의 인수를 'EffectCallback' 유형의 매개 변수에 할당할 수 없습니다. (0) | 2023.06.15 |
데이터의 오류를 무시하는 평균 IF(범위, 기준) 공식 (0) | 2023.06.15 |