2012-03-14 15 views
4

長い間中断した後、私はcに戻ります。私はファイルサイズを出力するために書いた小さなプログラムです。それはコンパイルされ、正しく動作し、かなりmanページからコピーされ貼り付けられています。しかし、それはgccからの迷惑な警告を私に与える。'fstat'の警告メッセージを渡す警告プログラムは、キャストのないポインタから整数を作成します。

gcc -ggdb read_file_to_char_array.c -o read_file_to_char_array `mysql_config --cflags --libs && pkg-config --cflags --libs gtk+-2.0 && pkg-config --cflags --libs sdl` 
read_file_to_char_array.c: In function ‘main’: 
read_file_to_char_array.c:22:19: warning: [enabled by default] 
/usr/include/i386-linux-gnu/sys/stat.h:216:12: note: expected ‘int’ but argument is of type ‘struct FILE *’` 

私はそれが離れて行くことができますどのようになどの任意のヒント(警告を無効にせず;))

#include <sys/types.h> 
#include <sys/stat.h> 
#include <stdio.h> 
#include <stdbool.h> 
#include <string.h> 
#include <unistd.h> 

int main(int argc, char **argv) { 
    unsigned long *lengths; 
    FILE *fp; 
    struct stat sb; 

    fp = fopen("image.png", "rb"); 
    fstat(fp,&sb); 

    printf(" Size - %lld : ", (long long)sb.st_size); 

    fclose(fp); 

} 
+0

私はあなたのプログラムで20行しかカウントしないので、警告はどの行を参照しているのか分かりません。[pastebin](www.pastebin.com)にすべてを投稿してください。 –

+1

画像ファイルに "rb"を使用すると+1 – bernie

答えて

11

あなたはpass a file descriptor、ないFILE *する必要があります。

int fstat(int fildes, struct stat *buf);

FILE *からファイルディスクリプタを取得するためにfileno(3)を使用してみてください。

int fd; 

fp = fopen("image.png", "rb"); 
fd = fileno(fp); 

fstat(fd, &sb); 
+0

このエラーメッセージはまったく誤解を招きました。私は問題が&sbによって引き起こされたと考えました。 –

+0

'fileno'はまさしく私の後でした。ありがとう! –

関連する問題