ОБСУЖДЕНИЕ

Программа на Си.

11 ответов 7,8 тыс.
Статус
Закрыто для дальнейших ответов.
Автор темы
Срочно надо на языке Си написать программу, которая могла бы измерить скорость вывода данных на диск.
Заранее огромное спасибо!
 
Не совсем корректный вопрос. Нужно уточнить:
1) на каком С
2) в какой опер. системе
3) какими функциями (опер. системы - API?) можно пользоваться
4) что писать на диск (тип файла) - или максимальную скорость
5) на какой диск
6) точность, с какой определять
Идея простая: засечь время, вывести N раз, разница времен, деленная на N
 
1) чтобы компилятором Turbo C компилировалась
2) винда
3) я полагаю, что можно пользоваться наиболее простыми функциями... на ваше усмотрение, на самом деле...
4) вопрос не поняла... :) в принципе, ничего при выдаче заданий не оговаривалось... но дело в том, что эта задача рассматривается, как курсовая работа на 1м курсе технического ВУЗа... поэтому какие-то ограничения всё-таки есть, наверное...
5) хард, наверное
6) тоже не оговорено... важна суть...
З.ы: если вы утверждаете, что идея несложна, то может быть окажете небольшую услугу... если осидеть и покорпеть месяца 2 - возможно, я и додумаюсь, как написать вот такую вот непростую прогу... Но у меня в запасе всего 3-4 дня... не больше...
B)
 
1) У меня Turbo C 2.0 - пойдет? (есть GCC из свободных, и стандартный набор)
4) Тип файла - в принципе ОБЩАЯ скорость записи может быть различной (например, при записи в текстовый идет еще и преобразование информации). Но, видимо, если судить по Вашему ответу, то .... Хм. Попробую сравнить
ЗЫ: иначе бы и не писал B)
 
Boriss,
1) пойдёт.
З.ы: в понедельник - последний день сдачи курсовика...
на вас вся надежда...
З.ы#2: есть одно пожелание - в проге оставляйте, плз, комменты, чтобы я могла разобраться, что к чему, и тоже писать такие вотЪ программы...
 
Boriss
Помогите.... Ну пожалуйста....
:D
 
К вечеру только смогу прислать - отчеты заели
 
<!--QuoteBegin-Boriss+26:12:2005, 12:17 -->
<span class="vbquote">(Boriss @ 26:12:2005, 12:17 )</span><!--QuoteEBegin-->К вечеру только смогу прислать - отчеты заели
[snapback]28766" rel="nofollow" target="_blank[/snapback]​
[/quote]
Хорошо! Конечно...!
Лишь бы только написали бы...
 
А я всё жду...
 
Вот основа. Проверялось в TurboC 2.0
Теперь найдите информацию (спишите, скопируйте о выводе с помощью потоков fwrite ....)
Код:
#include <stdio.h>
#include <time.h>

int main () {
 FILE *fp;
 char str[80] = "0123456789";
 int len;
 time_t start, end;
 long int t, null_for;
 long times = 100;

 if ((fp = fopen("diskwr1.dat", "w")) == NULL) {
 printf("Ошибка открытия файла diskwr.dat\n");
 return -1; }

 printf("Определение длительности работы пустого цикла\n");
 printf("и одновременно необходимого числа раз выполнения цикла\n");
 do {
 times *= 2;
 start = time(NULL);
  for (t=0; t < times; t++);
 end  = time(NULL);
 null_for = difftime(end, start);
 printf("times = %li  %i\n", times, null_for);
 } while (null_for == 0);

 len = strlen(str);
 printf("Вывод с помощью оператора fputs\n");
 start = time(NULL);
  for (t=0; t<times; t++)
  fputs(str, fp);
 end  = time(NULL);
/*  fputs("\n", fp); */
 printf("\nС помощью fputs символ записывается за %e секунд\n",
 (difftime(end, start)-null_for)/times/len);
 fclose(fp);

 printf("Вывод с помощью оператора fwrite\n");
 fp = fopen("diskwr2.dat", "wb");
 start = time(NULL);
  for (t=0; t < times; t++) fwrite(&str, len, 1, fp);
 end = time(NULL);
 fclose(fp);

 printf("с помощью fwrite за %e секунд",
   (difftime(end, start)-null_for)/times/len);

return 0;
}
Думаю, что все ясно. Но учтите, что файлы создаются на 62,5 Мег
Есть и другие варианты решения ...
 
:rolleyes:
А проще это нельзя решить..?
Вот посмотрите такой вариант проги, он правильный?

Код:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <time.h>

void main()

{
FILE* file;
int pr, pr1, pr2;
double i;
struct dostime_t t1, t2;
_dos_gettime(&t1);
file = fopen ("test.txt", "wt");
for(i=0;i<10000000;i++)
{
 fputc (rand(100), file);
}
_dos_gettime(&t2);


pr1 = (int)t1.second + t2.second+ t1.hsecond+t1.hsecond;
pr2 = (int)t2.second + t2.second+ t2.hsecond+t2.hsecond;

printf("%d\n", pr1+pr2);


fclose(file);
getch();
}
 
Спасибо всем большое!!!!!!!!!!!!!!!
Особенно вам, Boriss!
У меня зачёт по курсовой!!!
С наступающим и удачи в Новом году!
 
Статус
Закрыто для дальнейших ответов.