ファイルサイズの計算に fseek() および ftell() を使用しない

fseek() からのftell()は推奨されないそうです。

fstatを使うといいよ。

#include <io.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>  
#include <share.h>

FILE *fp;
long file_size;
char *buffer;
struct stat stbuf;
int fd;

fd = open("foo.bin", O_RDONLY);
if (fd == -1) {
  /* エラー処理 */
}

if (fstat(fd, &stbuf) == -1) {
  /* エラー処理 */
}

file_size = stbuf.st_size;