home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_C / SNIP9404.ZIP / SPEED.C < prev    next >
C/C++ Source or Header  |  1994-04-03  |  4KB  |  156 lines

  1. /******** CALCULATE I/O PERFORMANCE TO NUL FILE ********/
  2.  
  3. #include <assert.h>
  4. #include <dos.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. #define CHK     100             /* speed factor */
  9.  
  10. long ticks(long tick)                                   /* GET BIOS TIME TICK */
  11. {
  12.         union REGS reg;
  13.         reg.h.ah=0;
  14.         int86(0x1A, ®, ®);
  15.         return ((long)reg.x.cx<<16)+reg.x.dx-tick;
  16. }
  17.  
  18. long time_it(void(*func)(void))
  19. {
  20.         long t = ticks(0L);
  21.         (*func)();
  22.         return ticks(t);
  23. }
  24.  
  25. void show_it(long t)
  26. {
  27.         long lquot, lrem;
  28.         t = (t*1000/182+5)/10;
  29.         lquot = t/10;
  30.         lrem = t%10;
  31.         printf("%3ld.%02d sec", lquot, (int)lrem);
  32. }
  33.  
  34. void t_printf(void)
  35. {
  36.         register FILE *fp;
  37.         register unsigned u;
  38.  
  39.         fp = fopen("NUL", "wt");
  40.         assert(fp != NULL);
  41.         for (u=0; u<50*CHK; ++u)
  42.                 fprintf(fp, "Now is %d time for %d little indians\n", 123, -456);
  43.         fclose(fp);
  44. }
  45.  
  46. void b_printf(void)
  47. {
  48.         register FILE *fp;
  49.         register unsigned u;
  50.  
  51.         fp = fopen("NUL", "wb");
  52.         assert(fp != NULL);
  53.         for (u=0; u<50*CHK; ++u)
  54.                 fprintf(fp, "Now is %d time for %d little indians\n", 123, -456);
  55.         fclose(fp);
  56. }
  57.  
  58. void tu_printf(void)
  59. {
  60.         register FILE *fp;
  61.         register unsigned u;
  62.  
  63.         fp = fopen("NUL", "wt");
  64.         assert(fp != NULL);
  65.         setbuf(fp, NULL);
  66.         for (u=0; u<5*CHK; ++u)
  67.                 fprintf(fp, "Now is %d time for %d little indians\n", 123, -456);
  68.         fclose(fp);
  69. }
  70.  
  71. void bu_printf(void)
  72. {
  73.         register FILE *fp;
  74.         register unsigned u;
  75.  
  76.         fp = fopen("NUL", "wb");
  77.         assert(fp != NULL);
  78.         setbuf(fp, NULL);
  79.         for (u=0; u<5*CHK; ++u)
  80.                 fprintf(fp, "Now is %d time for %d little indians\n", 123, -456);
  81.         fclose(fp);
  82. }
  83.  
  84. void t_write(void)
  85. {
  86.         register FILE *fp;
  87.         register unsigned u;
  88.  
  89.         fp = fopen("NUL", "wt");
  90.         assert(fp != NULL);
  91.         for (u=0; u<250*CHK; ++u)
  92.                 fwrite("Now is the time for all good men to come\n", 41, 1, fp);
  93.         fclose(fp);
  94. }
  95.  
  96. void b_write(void)
  97. {
  98.         register FILE *fp;
  99.         register unsigned u;
  100.  
  101.         fp = fopen("NUL", "wb");
  102.         assert(fp != NULL);
  103.         for (u=0; u<500*CHK; ++u)
  104.                 fwrite("Now is the time for all good men to come\n", 41, 1, fp);
  105.         fclose(fp);
  106. }
  107.  
  108. void tu_write(void)
  109. {
  110.         register FILE *fp;
  111.         register unsigned u;
  112.  
  113.         fp = fopen("NUL", "wt");
  114.         assert(fp != NULL);
  115.         setbuf(fp, NULL);
  116.         for (u=0; u<100*CHK; ++u)
  117.                 fwrite("Now is the time for all good men to come\n", 41, 1, fp);
  118.         fclose(fp);
  119. }
  120.  
  121. void bu_write(void)
  122. {
  123.         register FILE *fp;
  124.         register unsigned u;
  125.  
  126.         fp = fopen("NUL", "wb");
  127.         assert(fp != NULL);
  128.         setbuf(fp, NULL);
  129.         for (u=0; u<200*CHK; ++u)
  130.                 fwrite("Now is the time for all good men to come\n", 41, 1, fp);
  131.         fclose(fp);
  132. }
  133.  
  134. main(void)
  135. {
  136.         show_it(time_it(t_printf));
  137.         printf(": time for text printf buffered\n");
  138.         show_it(time_it(b_printf));
  139.         printf(": time for binary printf buffered\n");
  140.         show_it(time_it(tu_printf));
  141.         printf(": time for text printf unbuffered\n");
  142.         show_it(time_it(bu_printf));
  143.         printf(": time for binary printf unbuffered\n");
  144.  
  145.         show_it(time_it(t_write));
  146.         printf(": time for text write buffered\n");
  147.         show_it(time_it(b_write));
  148.         printf(": time for binary write buffered\n");
  149.         show_it(time_it(tu_write));
  150.         printf(": time for text write unbuffered\n");
  151.         show_it(time_it(bu_write));
  152.         printf(": time for binary write unbuffered\n");
  153.  
  154.         return 0;
  155. }
  156.