Здравствуйте, Egor, Вы писали:
E>Здравствуйте.
E>Помогите разобраться.
E>Программа считывает файл в буфер. Вывод на экран из буфера.
E>Программа должна осуществить замер времени от начала считывания из файла до момента вывода на экран последнего символа.
E>Имя файла и размер буфера задается с командной строки как параметры. Буфер 1Кб, 10Кб, 20Кб и т.д. до 64Кб.
E>Не могу понять в чем дело. В тексте я пометил подозрительную строку как /*???*/. Вот если на ней установить breakPoint, то выдается ошибка — invalid BreakPoint и эта строка игнорируется вообще в программе.
E>Если же в этой строке указать функцию _read(...), то ошибка — invalid BreakPoint не выдается.
E>Далее. Считывание файла проходит более менее нормально при размерах буфера до 30Кб,
E>При 40Кб получаем.
E>E>bytes = read(handle,buf,sbuf)
E>
E>равно нулю или отрицательному значению. В чем дело?
E>Пробовал на файлах разного размера от 61Кб до 15Мб.
E>Посоветуйте что делать.Спасибо.
E>E>#include <stdio.h>
E>#include <stdlib.h>
E>#include <dos.h>
E>#include <conio.h>
E>#include <io.h>
E>#include <alloc.h>
E>#include <time.h>
E>#include <FCNTL.H>
E> int main(int argc, char ** argv)
E>{
E> /* Переменные для работы с файлом */
E> int handle;
E> long bytes;
E> char *buf;
E> long sbuf;
E> /* Переменные для подсчета времени */
E> time_t tm1, tm2;
E> clrscr(); // очистка экрана
E> /* Открываем файл */
E> if ((handle = open(_argv[1], O_RDONLY)) == -1)
E> {
E> printf("Error Opening File\n");
E> return -1;
E> };
E> /* Определяем размер буфера */
E> sbuf = (atoi(_argv[2]));
E> sbuf*=1024;
E> if((buf = new(char[sbuf]))==NULL)
E> {
E> printf("Not enough memory to allocate buffer\n");
E> return -1;
E> };
E> tm1 = time(NULL);
E>/*??? см.тут*/ bytes = read(handle,buf,sbuf);
E> while(bytes>0)
E> {
E> printf(buf);
E> bytes = read(handle,buf,sbuf);
E> };
E> tm2 = time(NULL);
E> delete(buf);
E> close(handle);
E> printf("\n\n==============================================");
E> printf("\nРазмер буфера: %ld kb",sbuf/1024);
E> printf("\nВремя обработки: %ld сек.",tm2-tm1);
E> return 0;
E>}
E>
Доброго !
В какой модели скомпилено.. Large, Huge?
Файл в текстовом режиме открыли.
lseek на начало не сделали(на всякий случай)
Когда-то на борланде делал подобное, но чтение огранизовал по другому, только не помню зачем
int h_from;
unsigned bait;
long length;
char* vBlock;
unsigned blockSize;
.................
length=filelength(h_from);
if (length>blockSize)
bait=read(h_from,vBlock,blockSize); /* Количество байт в блоке */
else
bait=read(h_from,vBlock,length); /* Количество байт в блоке */
while (bait > 0)
{
....................
length-=bait;
if (length>blockSize)
bait=read(h_from,vBlock,blockSize);
else
bait=read(h_from,vBlock,length);
}
С уважением.