Перво-наперво:
Проверьте файл как до, так и после вызова open (). Если в Linux вы можете использовать код:
char paxbuff[1000]; // at start of function
sprintf (paxbuff,"ls -al %s",filename);
system (paxbuff);
fid = open(filename, O_CREAT | O_RDWR, 0660); // this line already exists.
system (paxbuff);
Затем, после вызова shmat (), проверьте возвращаемые значения и размер следующим образом:
offset_table_p = (ubyte_2 *) shmat(fid, 0, SHM_MAP); // already exists.
printf ("ret = %p, errno = %d\n",offset_table_p,errno);
printf ("sz = %d\n",table_size);
Этого должно быть достаточно, чтобы решить проблему.