본문 바로가기

지식/VC++

windwos에서 read함수 사용시

윈도우즈에서 read함수를 사용시 주의할 점이 있다.
그것은 파일 용량보다 큰 용량을 읽으려 할 경우
읽어들인 데이터 뒤에 읽어들이려했던 데이터만큼의 값만큼 덤프데이터가 들어 올 수 있다는것이다.

가령 a.txt안에는

1234567890
abcedfghij

란 내용이 들어있다고하자.
이러한 상황에서 실제 a.txt.의 사이즈가 22byte라고 했을때

char *p = (char*)malloc(25);
int fd = _open("a.txt",_O_RDONLY);
int nRead = _read(fd,p,25);

일때

p안에는 1234567890abcdefghij와 덤프값 3개가 들어있었다.
그래서 nread만큼을 제외한 나머지 3바이트를 memset을 통하여 초기화 하는수밖에 없었다.
원인은 모르겠고 일정에 쫓기는와중이라 이런식으로 사용하기로 하였다.

_read발고 CreateFile 과 OpenFile을 조합하여 파일을 읽어도 결과는 마찬가지였다..