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

Трябваше да превключа някакъв функционален c код от 32-битова машина на 64-битова машина. Намерих някои полезни връзки за това как да направя това (напр. Преобразуване на 32-битово приложение в 64-битово приложение в C) и досега съм заменил всички случаи на "long" с "int", но все още срещам проблеми.

Програмата се компилира, но когато я стартирам, засяда. Когато го затворя принудително, получавам Seg. грешка. Намерих точния ред, където програмата се затваря (т.е. стига до 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