fread 제대로 사용하려면..
글쓴이: lugi / 작성시간: 수, 2008/12/24 - 4:56오후
fread가 signal등 으로 partial read를 수행하고 빠져나갈수 있다고 알고있습니다.
이와 같은 partial read를 대비한 아래와 같은 sample code를 자주 보았습니다만,
while( fread(buf,dsize,len,fp) !=0)
{
...
};fread 호출 후, signal발생 등으로 return값이 0이 된다면, 위의 코드는 결국 한바이트도 읽지 못할것 같습니다. 이런 경우를 대비해서 아래와 같이 해야 더 안전한것이 아닌가 해서 질문드립니다.
(단, 로컬 파일시스템상의 정규 파일만 가정하겠습니다.)
int file_read(unsigned char *buf,size_t data_size,size_t len,FILE *fp)
{
ssize_t read_len=0;
while(len != 0 )
{
read_len=fread(buf,data_size,len,fp));
if(ferror(fp))
(EINTR == errno) ? continue: return -1;
if(feof(fp))
return -1;
len -= read_len;
buf += read_len * data_size;
}
return 0;
};제가 괜한 걱정을 하는건지요? 실제로 fread등의 buffered IO가 아닌 read() system call을 사용시에는 위와 비슷한 형태로 사용하는것으로 알고 있습니다.
의견 부탁드립니다.
감사합니다.
Forums:


댓글 달기