Re[4]: Не могу понять этот Borland C++ 3.1
От: Egor  
Дата: 03.03.05 00:31
Оценка:
Ну вообщем наваял что-то на уровне интуиции.
Вроде бы работает, хотя есть вопросы.
Например, при выделении памяти под буфер

buf = new(char[sbuf])

Почему он не пустой. В нем сразу есть какой-то мусор.
И еще. Если сделать вот так,

sbuf = (atoi(_argv[2]))*1024;

то переменная равна нулю. Приходится делать вот так

sbuf = (atoi(_argv[2]));
sbuf *= 1024;

А вот и сам текст.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <dos.h>

int main(int argc, char ** argv){

/* Переменные для работы с файлом */
    FILE *stream;
    char *buf;
    long sbuf;
    long rd;

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

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

/* Открываем файл на чтение.
    Если ошибка - выведи сообщение и прекрати работу. */
 if ((stream = fopen(_argv[1],"r")) == NULL)
     {
      fprintf(stderr, "Cannot open output 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);

     /* читаем и выводим на экран пока не будет конец файла,
         т.е. пока возвращаемый функцией результат будет положительным */
     do{
      rd = (unsigned int) fread(buf, sbuf, 1, stream);
      printf(buf);
     } while(rd>0);

     /* засекаем время конца считывания */
     tm2 = time(NULL);

     /* закрываем файл */
     fclose(stream);

     /* освобождаем память, выделенную под буфер */
     delete(buf);

     /* выводим на экран результаты работы программы */
     printf("\n\n==============================================");
     printf("\nРазмер буфера: %ld kb",sbuf/1024);
     printf("\nВремя обработки: %ld сек.",tm2-tm1);

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