Программа не читает весь файл - PullRequest
1 голос
/ 15 мая 2019

Я пишу программу шестнадцатеричного дампа на C. Я знаю, что существует множество программ шестнадцатеричного дампа, но я хотел написать одну для опыта.Я написал программу в CodeBlocks для Windows, но, похоже, я не могу заставить ее работать.

Я читаю в тестовой программе, которая составляет примерно 137 000 байт, но программа останавливается на 417 байт.Теперь, когда я компилирую код в Linux (поскольку это только консольное приложение и использует стандартные библиотеки C), он работает отлично и возвращает правильное количество байтов в файле.Кто-нибудь есть идеи, почему read () не будет работать в Windows, но прекрасно работает в Linux?

Ниже приведен пример того, как я читаю в файле.

int main(int argc, char **argv)
{
    if (argc != 2) { return 1; }

    int fd = open(argv[1], O_RDONLY);
    if (fd == -1) { return 1; }

    unsigned char buffer[8];
    unsigned int bytes = 0;
    unsigned int total_bytes = 0;

    while ((bytes = read(fd, buffer, sizeof(unsigned char) * 8)) > 0) {
        ...
        total_bytes += bytes;
    }

    printf("Total Bytes: %d\n", total_bytes);

    return 0;
}

1 Ответ

1 голос
/ 15 мая 2019

Я нашел ответ в этом посте в конце концов. У них была проблема со стандартным вводом данных, все же. Очевидно, замещающий символ (1A) такой же, как CTRL + Z в Windows, и поэтому он принудительно закрывал мою программу при чтении этого символа.

C чтение (из стандартного ввода) останавливается на символе 0x1a

...