#include #include #include /* Different ways to get filesizes, some are linux-specific (i think), some are posix */ void file_tell(void); void file_stat(void); void file_end(void); int main(void) { file_stat(); file_tell(); file_end(); return EXIT_SUCCESS; } /* This works on linux, but may not be posix compliant */ void file_stat(void) { const char *filename = "filesize.c"; struct stat st; if (stat(filename, &st) == 0) { printf("File size: %lld bytes\n", (long long)st.st_size); } else { perror("stat"); } } /* This works on all posix systems afaik */ void file_tell(void) { FILE *f = fopen("filesize.c", "rb"); if (!f) { perror("fopen"); return; } fseek(f, 0, SEEK_END); long size = ftell(f); fclose(f); if (size >= 0) { printf("File size: %ld bytes\n", size); } else { perror("ftell"); } } /* This is bad for obvious reasons*/ void file_end(void) { FILE *f = fopen("filesize.c", "rb"); if (!f) return; size_t size = 0; while (fgetc(f) != EOF) { size++; } fclose(f); printf("File size: %zu bytes\n", size); }