ф-ия Read в CBUilder

Hello comp,
Добрый день!
может кто-нибудь обяснить следующееЖ
1. есть файл rez.dat 160 К неважно какого типа.
2. он читается следующим кодом
int handleIn = open("rez.dat",O_RDONLY);
unsigned char buffer[1500];
int fs=0;
do {
lseek(handleIn,fs,1);
bin=read(handleIn,&buffer[1],1024);
fs=fs+bin;
bufread++;
fprintf(stream," bin %i\n",bin);
} while (bin>0);
close(handleIn);
3/ Результат-
bin 897
Record: bin 828
Record: bin 88
Record: bin 850
Record: bin 389
Record: bin 377
Record: bin 125
Record: bin 1024
Record: bin 454
Record: bin 704
Record: bin 250
Record: bin 1024
Record: bin 1024
Record: bin 1024
Record: bin 1024
Record: bin 1023
Record: bin 1024
Record: bin 1023
Record: bin 1024
Record: bin 0 -1
всего из 160 к прочитано около 12 К и финиш. при этом как прочитано!
не по 1024 байтика!!
можжете подсказать почему?
заранее спасибо
Ols
Здравствуйте, ol.
Вы писали 26 января 2004 г., 19:06:22:
Во-первых:
Эту строку надо дополнить
int handleIn = open("baze2.mdl",O_RDONLY|O_BINARY);
Как у тебя, файл интерпретируется как текстовый, и байты совпадающие
с контрольными кодами (как возврат коретки, конец строки и т.д.) не
учитываются.
После этого будет читаться по 1024б.
Во-вторых, непонятно, для чего каждый раз позиционировать. Ведь
функция read() делает это автоматически. Если закоментируешь функцию
lseek, то будет читаться больше чем 12К. А то у тебя и read
позиционирует куда надо, а потом ты ещё к той позиции прибавляешь
общее число прочитанных байтов и указатель переноситься далеко вперёд.
Если уж очень охота использовать эту фу-ю, вместо единицы в третьем
параметре (что соответствует SEEK_CUR - позиционирование от текущей позиции)
постав 0 = SEEK_SET - поз. от начала файла.
Эта строка то же не пригодиться, если без lseek будет.