1 /* test 1 */
2
3 #include <sys/types.h>
4 #include <sys/wait.h>
5 #include <errno.h>
6 #include <signal.h>
7 #include <stdlib.h>
8 #include <unistd.h>
9 #include <stdio.h>
10
11 #define SIGNUM 10
12 #define MAX_ERROR 4
13 #define ITERATIONS 10
14
15 _VOLATILE int glov, gct;
16 int errct;
17 int subtest;
18
19 _PROTOTYPE(int main, (int argc, char *argv []));
20 _PROTOTYPE(void test1a, (void));
21 _PROTOTYPE(void parent, (void));
22 _PROTOTYPE(void child, (int i));
23 _PROTOTYPE(void test1b, (void));
24 _PROTOTYPE(void parent1, (int childpid));
25 _PROTOTYPE(void func, (int s));
26 _PROTOTYPE(void child1, (void));
27 _PROTOTYPE(void e, (int n));
28 _PROTOTYPE(void quit, (void));
29
30 int main(argc, argv)
31 int argc;
32 char *argv[];
33 {
34 int i, m = 0xFFFF;
35
36 sync();
37
38 if (argc == 2) m = atoi(argv[1]);
39
40 printf("Test 1 ");
41 fflush(stdout); /* have to flush for child's benefit */
42
43 system("rm -rf DIR_01; mkdir DIR_01");
44 chdir("DIR_01");
45
46 for (i = 0; i < ITERATIONS; i++) {
47 if (m & 00001) test1a();
48 if (m & 00002) test1b();
49 }
50
51 quit();
52 return(-1); /* impossible */
53 }
54
55 void test1a()
56 {
57 int i, n, pid;
58
59 subtest = 1;
60 n = 4;
61 for (i = 0; i < n; i++) {
62 if ((pid = fork())) {
63 if (pid < 0) {
64 printf("\nTest 1 fork failed\n");
65 exit(1);
66 }
67 parent();
68 } else
69 child(i);
70 }
71 }
72
73 void parent()
74 {
75
76 int n;
77
78 n = getpid();
79 wait(&n);
80 }
81
82 void child(i)
83 int i;
84 {
85 int n;
86
87 n = getpid();
88 exit(100+i);
89 }
90
91 void test1b()
92 {
93 int i, k;
94
95 subtest = 2;
96 for (i = 0; i < 4; i++) {
97 glov = 0;
98 signal(SIGNUM, func);
99 if ((k = fork())) {
100 if (k < 0) {
101 printf("Test 1 fork failed\n");
102 exit(1);
103 }
104 parent1(k);
105 } else
106 child1();
107 }
108 }
109
110
111 void parent1(childpid)
112 int childpid;
113 {
114
115 int n;
116
117 for (n = 0; n < 5000; n++);
118 while (kill(childpid, SIGNUM) < 0) /* null statement */
119 ;
120 wait(&n);
121 }
122
123 void func(s)
124 int s; /* for ANSI */
125 {
126 glov++;
127 gct++;
128 }
129
130 void child1()
131 {
132 while (glov == 0);
133 exit(gct);
134 }
135
136
137 void quit()
138 {
139
140 chdir("..");
141 system("rm -rf DIR*");
142
143 if (errct == 0) {
144 printf("ok\n");
145 exit(0);
146 } else {
147 printf("%d errors\n", errct);
148 exit(1);
149 }
150 }
151
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.