source: trunk/testcase/1023-maxfilehandles.c@ 2554

Last change on this file since 2554 was 1364, checked in by bird, 21 years ago

done.

  • Property cvs2svn:cvs-rev set to 1.5
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.5 KB
RevLine 
[1360]1/** @file
2 *
3 * Testcase for bug #1023 autoincrement of file handles.
4 *
5 * InnoTek Systemberatung GmbH confidential
6 *
7 * Copyright (c) 2004 InnoTek Systemberatung GmbH
8 * Author: knut st. osmundsen <bird-srcspam@anduin.net>
9 *
10 * All Rights Reserved
11 *
12 */
13
14/*******************************************************************************
15* Header Files *
16*******************************************************************************/
17#define INCL_DOS
18#define INCL_DOSINFOSEG
19#ifdef __IBMC__
20#include "../src/emx/include/os2emx.h"
21#else
22#include <os2.h>
23#endif
24#include <stdio.h>
[1362]25#include <io.h>
26#include <fcntl.h>
[1360]27#include <string.h>
28
29
30
31int main(int argc, const char **argv)
32{
[1361]33 int i,j;
[1360]34 LONG lFHDelta = 0;
35 ULONG cFHs = 0;
36 ULONG cFHLast;
37 unsigned msLastInc;
[1361]38 unsigned msEnd;
39 unsigned msStart;
[1363]40 unsigned msTotal = 0;
41 unsigned cFiles = 0;
42 unsigned cIncrements = 0;
43 int fStreams;
[1360]44 PGINFOSEG pGIS = GETGINFOSEG();
[1362]45#define MAX_FHS 10000
[1360]46 static FILE *apFiles[MAX_FHS];
[1362]47 static int aiFiles[MAX_FHS];
[1360]48
[1364]49 /*
50 * Init
51 */
52 fStreams = argc >= 2;
53
[1360]54 DosSetRelMaxFH(&lFHDelta, &cFHs);
[1364]55 printf("1023-maxfilehandles: starting at cFHs=%d; testing %s.\n", cFHs, fStreams ? "streams" : "io");
[1360]56
[1364]57 /*
58 * Open files.
59 */
[1360]60 cFHLast = cFHs;
61 msLastInc = pGIS->msecs;
62 for (i = 0; i < MAX_FHS; i++)
63 {
[1361]64 msStart = pGIS->msecs;
[1363]65 if (fStreams)
66 apFiles[i] = fopen(argv[argc - 1], "rb");
67 else
68 aiFiles[i] = open(argv[argc - 1], O_BINARY | O_RDONLY);
[1360]69 msEnd = pGIS->msecs;
[1363]70 if (fStreams ? apFiles[i] == NULL : aiFiles[i] < 0)
[1360]71 {
72 printf("error %d!\n", i + 1);
73 break;
74 }
75
76 lFHDelta = cFHs = 0;
77 DosSetRelMaxFH(&lFHDelta, &cFHs);
78 lFHDelta = cFHs = 0;
79 DosSetRelMaxFH(&lFHDelta, &cFHs);
80 if (cFHs != cFHLast)
81 {
[1362]82 printf("Max FH change %i (fh=%d): %d -> %d (inc: %d ms since last: %d ms)\n",
[1363]83 i + 1, fStreams ? fileno(apFiles[i]) : aiFiles[i],
84 cFHLast, cFHs, msEnd - msStart, msStart - msLastInc);
85 /* stats */
86 cIncrements++;
87 msTotal += msEnd - msLastInc;
88 msEnd = msLastInc = pGIS->msecs;
[1360]89 }
90 cFHLast = cFHs;
91 }
92
[1363]93 msTotal += msEnd - msLastInc;
[1364]94 if (!msTotal)
95 msTotal++;
[1363]96 cFiles = i;
97
[1360]98 lFHDelta = cFHs = 0;
99 DosSetRelMaxFH(&lFHDelta, &cFHs);
100 printf("cFHs=%d\n", cFHs);
[1364]101 printf("msTotal=%d cIncrements=%d cFiles=%d i.e. %d handles per second (%s)\n",
102 msTotal, cIncrements, cFiles, cFiles * 1000 / msTotal, fStreams ? "streams" : "io");
[1361]103
104 /*
105 * Free the files.
106 */
107 msStart = pGIS->msecs;
[1363]108 if (fStreams)
109 {
110 for (j = 0; j < i; j++)
111 fclose(apFiles[j]);
112 }
113 else
114 {
115 for (j = 0; j < i; j++)
116 close(aiFiles[j]);
117 }
[1361]118 msEnd = pGIS->msecs;
[1364]119 msTotal = msEnd - msStart;
120 if (!msTotal)
121 msTotal++;
122 printf("close of %d files took %d ms i.e. %d handles per seconds\n",
123 j, msTotal, cFiles * 1000 / msTotal);
[1361]124
125 /*
126 * Report the result.
127 */
[1360]128 if (i < 9900)
129 {
130 printf("1023-maxfilehandles: failed, could only open %d handles, expected > 9900\n", i);
131 return 1;
132 }
133
134 printf("1023-maxfilehandles: succeeded opening %d handles.\n", i);
135 return 0;
136}
Note: See TracBrowser for help on using the repository browser.