I'm trying to write a simple program to generate hex output from file. This is my two.c file:
#include <stdio.h>
int 
main(void) {
    printf("%s\n", "Hello");
    return 0;
}
which was compiled in this way:
 gcc -std=c99 -Wall -Wextra -pedantic-errors two.c -o two
so I have two executable file.
Now, I wrote a program to read that file and show the binary (hexadecimal) output of it. This is my program:
#include <stdio.h>
int 
fileSize(FILE *ptr) {
    int size = 0;
    fseek(ptr, 0, SEEK_END);
    size = ftell(ptr);
    fseek(ptr, 0, SEEK_SET);
    return size;
}
int 
main(void) {
    FILE *fp;
    fp = fopen("two", "rb");
    int sz = fileSize(fp);
    char buff[ sz ];
    if (!fp) 
        printf("%s\n", "Not great at all");
    else 
        while (!feof(fp)) {
            fgets(buff, sz, fp);
            for (int i = 0; i < sz; i++) {
                printf("%02x%02x ", (buff[i] & 0xFF), (buff[i+1] & 0xFF));
                if (!(i % 8))
                    printf("\n");
            }
            printf("\n");
        }
    fclose(fp);
}
The problem is, when I use linux command xxd two > two.hex I'm getting completely different output (it's not about formatting) and there is only about 500 lines of bytes, not about 8k like in my output.
Where is the problem? Is something wrong with reading function fgets(buff, sz, fp);?