Programming/Programming Talk

심심하니 fread, fwrite, fseek, ftell 구현. (Windows)

포레 2012. 10. 21. 19:10

 

# fread

 

 size_t __cdecl fread( void *buffer, size_t size, size_t count, FILE *stream){
 unsigned long ul_rs = 0; //unsigned long return size
 ReadFile( (HANDLE)_get_osfhandle(stream->_file),
     buffer,
     count*size,
     &ul_rs,
     NULL) );
  return (size_t)ul_rs;
 }

 

 

# fwrite

 

 size_t __cdecl fwrite( void *buffer, size_t size, size_t count, FILE *stream){
 unsigned long ul_rs = 0; //unsigned long return size
 WriteFile( (HANDLE)_get_osfhandle(stream->_file),
    buffer,
    count*size,
    &ul_rs,
    NULL) );
 return (size_t)ul_rs;
 }

 

 

# fseek

 

 #define SEEK_SET FILE_BEGIN
 #define SEEK_CUR FILE_CURRENT
 #define SEEK_END FILE_END

 

 int __cdecl fseek( FILE *stream, long offset, int origin ){
  return (SetFilePointer(_get_osfhandle(stream->_file),offset,origin))0:(int)GetLastError();
 }

 

 

# ftell

 

 int __cdecl ftell(FILE *stream){
  return (int) SetFilePointer(_get_osfhandle(stream->_file),0,FILE_CURRENT);
 }