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

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

both.

  • Property cvs2svn:cvs-rev set to 1.4
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
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>
25#include <io.h>
26#include <fcntl.h>
27#include <string.h>
28
29
30
31int main(int argc, const char **argv)
32{
33 int i,j;
34 LONG lFHDelta = 0;
35 ULONG cFHs = 0;
36 ULONG cFHLast;
37 unsigned msLastInc;
38 unsigned msEnd;
39 unsigned msStart;
40 unsigned msTotal = 0;
41 unsigned cFiles = 0;
42 unsigned cIncrements = 0;
43 int fStreams;
44 PGINFOSEG pGIS = GETGINFOSEG();
45#define MAX_FHS 10000
46 static FILE *apFiles[MAX_FHS];
47 static int aiFiles[MAX_FHS];
48
49 DosSetRelMaxFH(&lFHDelta, &cFHs);
50 printf("cFHs=%d\n", cFHs);
51
52 /* check for args */
53 fStreams = argc >= 2;
54
55 cFHLast = cFHs;
56 msLastInc = pGIS->msecs;
57 for (i = 0; i < MAX_FHS; i++)
58 {
59 msStart = pGIS->msecs;
60 if (fStreams)
61 apFiles[i] = fopen(argv[argc - 1], "rb");
62 else
63 aiFiles[i] = open(argv[argc - 1], O_BINARY | O_RDONLY);
64 msEnd = pGIS->msecs;
65 if (fStreams ? apFiles[i] == NULL : aiFiles[i] < 0)
66 {
67 printf("error %d!\n", i + 1);
68 break;
69 }
70
71 lFHDelta = cFHs = 0;
72 DosSetRelMaxFH(&lFHDelta, &cFHs);
73 lFHDelta = cFHs = 0;
74 DosSetRelMaxFH(&lFHDelta, &cFHs);
75 if (cFHs != cFHLast)
76 {
77 printf("Max FH change %i (fh=%d): %d -> %d (inc: %d ms since last: %d ms)\n",
78 i + 1, fStreams ? fileno(apFiles[i]) : aiFiles[i],
79 cFHLast, cFHs, msEnd - msStart, msStart - msLastInc);
80 /* stats */
81 cIncrements++;
82 msTotal += msEnd - msLastInc;
83 msEnd = msLastInc = pGIS->msecs;
84 }
85 cFHLast = cFHs;
86 }
87
88 msTotal += msEnd - msLastInc;
89 cFiles = i;
90
91 lFHDelta = cFHs = 0;
92 DosSetRelMaxFH(&lFHDelta, &cFHs);
93 printf("cFHs=%d\n", cFHs);
94 printf("msTotal=%d cIncrements=%d cFiles=%d i.e. %d handles per second\n",
95 msTotal, cIncrements, cFiles, cFiles * 1000 / msTotal);
96
97 /*
98 * Free the files.
99 */
100 msStart = pGIS->msecs;
101 if (fStreams)
102 {
103 for (j = 0; j < i; j++)
104 fclose(apFiles[j]);
105 }
106 else
107 {
108 for (j = 0; j < i; j++)
109 close(aiFiles[j]);
110 }
111 msEnd = pGIS->msecs;
112 printf("close of %d files took %d ms\n", j, msEnd - msStart);
113
114 /*
115 * Report the result.
116 */
117 if (i < 9900)
118 {
119 printf("1023-maxfilehandles: failed, could only open %d handles, expected > 9900\n", i);
120 return 1;
121 }
122
123 printf("1023-maxfilehandles: succeeded opening %d handles.\n", i);
124 return 0;
125}
Note: See TracBrowser for help on using the repository browser.