Что-то еще, возможно, что-то глупое. Я попробовал ваш код, как здесь:
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
off_t pos;
int file ;
if((file = open("/Users/chasrmartin/.bash_history",O_RDONLY)) == -1){
perror(argv[0]);
exit(1);
}
printf("size off_t: %i\n", sizeof(off_t));
pos = lseek(file, (off_t)0, SEEK_CUR);
printf("pos: %lli\n", pos);
// same result for SEEK_SET and SEEK_END
pos = lseek(file, (off_t)2352, SEEK_CUR);
printf("pos: %lli\n", pos);
exit(0);
}
и получите такой результат:
bash $ gcc foo.c
bash $ ./a.out
size off_t: 8
pos: 0
pos: 2352
(Для определенности, это на Mac OS / X 10.5.6 на Intel.)
Update.
А может, это не глупо. Я только что попробовал это на PPC G5, и получил результаты, которые вы делаете.
Обновление 2
Хорошо, вот результат на КПП:
$ gcc foo.c
$ ./a.out
size off_t: 8
pos: 0
pos: 0