Автор
|
Тема: Буферезированное чтение из файла
|
klep |
опубликован 15-12-2001 21:07 MSK
Задача очень простая нужно получать из файла байты данных. Аналог while(ch=fgetch(in),ch>0); Только для увеличения быстродействия хочется считывать по блочно ,а возвращать по символьно.tmp[255]; char GetCharEx(FILE *in) { char buffer[255]; int bsize; // [skip] // флажок того что tmp не выбран полностью // если выбран снова считываем с файла while(!(feof(in)) ) { bsize = fread(buffer,1,sizeof(buffer),in); strncpy(tmp,buffer,bsize); } return tmp[0]; // к примеру.индекс произвольный }
вот что-то типа такого. Вопрос как это реализвать более красиво??????????
|
kuss
|
опубликован 15-12-2001 21:29 MSK
а этоу тебя работает?? по моему не должно, потому что при вызове функции снова и снова будет считывание из файла. Лучше сперва считать отдельно, а потом выдергивать символы.char *buf=malloc(256); FILE *in=fopen("dat","r"); read(int c) { fread(buf,1,c,in); } char getchar(int i) { return buf[i]; }
|
rivitna
|
опубликован 16-12-2001 12:06 MSK
Трудно представить для чего нужно такое извращение... Когда в моих программках я работаю с файлами, стараюсь весь файл считывать в буфер, слава Богу не DOS, затем работаю с буфером.Но с другой стороны функции работы с файлами сами по себе буферизованы, то есть по одному байту с файлами точно не работают, к тому же, кто гарантирует, что твой буфер, не попадет в своп. Короче, на мой взгляд, извращение |
Flex Ferrum
|
опубликован 16-12-2001 15:00 MSK
klep: Не парься. Файл, с которым ты работаешь, буфферизируется по крайне мере два раза - один раз самой системой, а другой - CRTL. К тому же в классах iostream это тоже реализованно. |