fread 제대로 사용하려면..

lugi의 이미지

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을 사용시에는 위와 비슷한 형태로 사용하는것으로 알고 있습니다.

의견 부탁드립니다.
감사합니다.