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

  • Автор темы Ness
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Ness

Гость
#1
Срочно надо на языке Си написать программу, которая могла бы измерить скорость вывода данных на диск.
Заранее огромное спасибо!
 
B

Boriss

Гость
#2
Не совсем корректный вопрос. Нужно уточнить:
1) на каком С
2) в какой опер. системе
3) какими функциями (опер. системы - API?) можно пользоваться
4) что писать на диск (тип файла) - или максимальную скорость
5) на какой диск
6) точность, с какой определять
Идея простая: засечь время, вывести N раз, разница времен, деленная на N
 
N

Ness

Гость
#3
1) чтобы компилятором Turbo C компилировалась
2) винда
3) я полагаю, что можно пользоваться наиболее простыми функциями... на ваше усмотрение, на самом деле...
4) вопрос не поняла... :) в принципе, ничего при выдаче заданий не оговаривалось... но дело в том, что эта задача рассматривается, как курсовая работа на 1м курсе технического ВУЗа... поэтому какие-то ограничения всё-таки есть, наверное...
5) хард, наверное
6) тоже не оговорено... важна суть...
З.ы: если вы утверждаете, что идея несложна, то может быть окажете небольшую услугу... если осидеть и покорпеть месяца 2 - возможно, я и додумаюсь, как написать вот такую вот непростую прогу... Но у меня в запасе всего 3-4 дня... не больше...
B)
 
B

Boriss

Гость
#4
1) У меня Turbo C 2.0 - пойдет? (есть GCC из свободных, и стандартный набор)
4) Тип файла - в принципе ОБЩАЯ скорость записи может быть различной (например, при записи в текстовый идет еще и преобразование информации). Но, видимо, если судить по Вашему ответу, то .... Хм. Попробую сравнить
ЗЫ: иначе бы и не писал B)
 
G

Guest

Гость
#5
Boriss,
1) пойдёт.
З.ы: в понедельник - последний день сдачи курсовика...
на вас вся надежда...
З.ы#2: есть одно пожелание - в проге оставляйте, плз, комменты, чтобы я могла разобраться, что к чему, и тоже писать такие вотЪ программы...
 
B

Boriss

Гость
#7
К вечеру только смогу прислать - отчеты заели
 
N

Ness

Гость
#8
<!--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]
Хорошо! Конечно...!
Лишь бы только написали бы...
 
B

Boriss

Гость
#10
Вот основа. Проверялось в 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 Мег
Есть и другие варианты решения ...
 
N

Ness

Гость
#11
: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();
}
 
N

Ness

Гость
#12
Спасибо всем большое!!!!!!!!!!!!!!!
Особенно вам, Boriss!
У меня зачёт по курсовой!!!
С наступающим и удачи в Новом году!
 
Статус
Закрыто для дальнейших ответов.