Ошибка чтения () в коде C после переключения с 34-битной на 64-битную машину

Мне пришлось переключить некоторый функциональный код c с 32-битной машины на 64-битную. Я нашел несколько полезных ссылок о том, как это сделать (например, Преобразование 32-битного приложения в 64-битное приложение на C) и до сих пор я заменил все экземпляры long на int, но я все еще сталкиваюсь с проблемами.

Программа компилируется, но когда я ее запускаю, она зависает. Когда я заставляю его закрыться, я получаю сегмент. вина. Я нашел точную строку, в которой программа зависает (т.е. она попадает в SheilaTestPoint1, но не в SheilaTestPoint2).

    fprintf(stderr, "SheilaTestPoint1");
    check = read(fpheading, &header, 8);
    fprintf(stderr, "SheilaTestPoint2");

Есть предложения о том, как действовать?

Спасибо!!


person user3216648    schedule 12.02.2014    source источник
comment
Я предполагаю, что 8 - это размер header, но это могло измениться. Вы должны сделать sizeof(header). Но тогда, если фактический файл содержит 8 байтов, вам следует изменить определение header, чтобы оно было ровно 8 байтов.   -  person rodrigo    schedule 13.02.2014
comment
Это невозможно, если не увидеть предположительно проблемный код в контексте.   -  person Chris Stratton    schedule 13.02.2014
comment
@rodrigo - вы приближаетесь к хорошему моменту: если заголовок представляет собой структуру, его внутренний формат и упаковка могли измениться, что вполне возможно, больше не соответствует данным в файле.   -  person Chris Stratton    schedule 13.02.2014
comment
Мне любопытно, что такое read. Это POSIX read(2)? fpheading выглядит как FILE*, но open(2) принимает файловый дескриптор int. Разве вы не получили бы EFAULT, а не segfault?   -  person Mark Nunberg    schedule 13.02.2014
comment
Привет, спасибо за вашу помощь. fpheading - это дескриптор файла, поэтому это int. Также заголовок определен в программе ранее как: char header [20];   -  person user3216648    schedule 19.02.2014