Не могу понять этот Borland C++ 3.1
От: Egor  
Дата: 02.03.05 01:20
Оценка:
Здравствуйте.
Помогите разобраться.
Программа считывает файл в буфер. Вывод на экран из буфера.
Программа должна осуществить замер времени от начала считывания из файла до момента вывода на экран последнего символа.
Имя файла и размер буфера задается с командной строки как параметры. Буфер 1Кб, 10Кб, 20Кб и т.д. до 64Кб.
Не могу понять в чем дело. В тексте я пометил подозрительную строку как /*???*/. Вот если на ней установить breakPoint, то выдается ошибка — invalid BreakPoint и эта строка игнорируется вообще в программе.
Если же в этой строке указать функцию _read(...), то ошибка — invalid BreakPoint не выдается.
Далее. Считывание файла проходит более менее нормально при размерах буфера до 30Кб,
При 40Кб получаем.
bytes = read(handle,buf,sbuf)

равно нулю или отрицательному значению. В чем дело?
Пробовал на файлах разного размера от 61Кб до 15Мб.
Посоветуйте что делать.Спасибо.

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <io.h>
#include <alloc.h>
#include <time.h>
#include <FCNTL.H>

 int main(int argc, char ** argv)

{
    /* Переменные для работы с файлом */
    int handle;
    long bytes;
    char *buf;
    long sbuf;

    /* Переменные для подсчета времени */
    time_t tm1, tm2;

    clrscr(); // очистка экрана

  /* Открываем файл */
    if ((handle = open(_argv[1], O_RDONLY)) == -1)
        {
         printf("Error Opening File\n");
         return -1;
        };

  /* Определяем размер буфера */
      sbuf = (atoi(_argv[2]));
      sbuf*=1024;

      if((buf = new(char[sbuf]))==NULL)
        {
         printf("Not enough memory to allocate buffer\n");
         return -1;
        };

        tm1 = time(NULL);
/*??? см.тут*/     bytes = read(handle,buf,sbuf);

        while(bytes>0)
        {
         printf(buf);
         bytes = read(handle,buf,sbuf);
        };

        tm2 = time(NULL);

        delete(buf);
        close(handle);

        printf("\n\n==============================================");
        printf("\nРазмер буфера: %ld kb",sbuf/1024);
        printf("\nВремя обработки: %ld сек.",tm2-tm1);

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