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:
댓글 달기