Использование ввода / вывода файла для чтения длины байта

Я пытаюсь найти длину байта двух разных файлов со следующим кодом, но получаю длину байта как 1, что, очевидно, неверно. В конечном счете, я пытаюсь сравнить позиции памяти каждого файла и распечатывать, где они отличаются, как вы увидите. Поэтому я никуда не printf , и сделал заявления printf чтобы увидеть, где может быть проблема. Следовательно, похоже, что моя длина неправильно вычисляется.

Замечание, которое может помочь в моей проблеме – я нашел это для memcmp, но означает ли это, что я не могу использовать != ?:

if Возвращаемое значение, если <0, то оно указывает, что str1 меньше str2

если возвращаемое значение if> 0, то оно указывает, что str2 меньше, чем str1

если возвращаемое значение if = 0, то оно указывает, что str1 равно str2

Помогите, пожалуйста!

  void compare_two_binary_files(int f1, int f2) { ssize_t byte_read_f1, byte_read_f2, length, numRead, bob, length2; char buf1[BUF_SIZE], buf2[BUF_SIZE], a[100], b[100], counter[100]; int count = 0, b_pos1, b_pos2; while ((byte_read_f1 = read(f1, buf1, sizeof buf1) > 0) && (byte_read_f2 = read(f2, buf2, sizeof buf2) >0)) { length = byte_read_f1; length2 = byte_read_f2; printf("F1 byte length:%o\n", length); printf("F2 byte length:%o\n", length2); ssize_t len = byte_read_f1 <byte_read_f2 ? byte_read_f1 : byte_read_f2; b_pos1 = memcmp(buf1, buf2, len); printf("Memcmp: %d\n", b_pos1); if (memcmp(buf1, buf2, len) != 0){ // use memcmp for speed ssize_t i; for (i = 0; i<len; i++){ if (buf1[i] != buf2[i]) break; } } 

    > имеет более высокий приоритет, чем = , поэтому

     if ((byte_read_f1 = read(f1, buf1, sizeof buf1) > 0) && ...) 

    эквивалентно

     if (byte_read_f1 = (read(f1, buf1, sizeof buf1) > 0) && ...) 

    который присваивает 1 byte_read_f1 если был прочитан хотя бы один байт.

    Что вы хотите

     if ((byte_read_f1 = read(f1, buf1, sizeof buf1)) > 0 && ...) 

    Если ваша программа читает файлы, отличные от обычных (например, стандартный ввод), вы также должны рассмотреть случай, когда read () возвращает меньше байтов, чем запрошено.

    Для обычных файлов read () всегда возвращает количество запрошенных байтов, с единственным исключением в конце файла, конечно. Поэтому, если файлы отличаются по длине, то в какой-то момент read(f1, ...) вернет другую сумму, чем read(f2, ...) , или один возвращает ноль, а другой нет.

    Я думаю, что есть ошибка во время условия:

     while ((byte_read_f1 = read(f1, buf1, sizeof buf1) > 0) && (byte_read_f2 = read(f2, buf2, sizeof buf2) >0)) 

    где вы присваиваете read(f1, buf1, sizeof buf1) > 0 (результат true = 1) byte_read_f1 и так для byte_read_f2 .

    Может ли это помочь?

    Обновить

    Как показывают комментарии:

    Правильная форма:

     while (((byte_read_f1 = read(f1, buf1, sizeof buf1)) > 0) && ((byte_read_f2 = read(f2, buf2, sizeof buf2)) >0)) 

    Как насчет fseek () в конце каждого файла и запрос на смещение позиции файла? Вызов fstat () или что-то вроде этого может даже сказать вам размер напрямую.