Re: Не могу понять этот Borland C++ 3.1
От: Аноним  
Дата: 02.03.05 07:03
Оценка:
Здравствуйте, 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);
}


С уважением.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.