xref: /minix3/minix/tests/test1.c (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1*433d6423SLionel Sambuc /* test 1 */
2*433d6423SLionel Sambuc 
3*433d6423SLionel Sambuc #include <sys/types.h>
4*433d6423SLionel Sambuc #include <sys/wait.h>
5*433d6423SLionel Sambuc #include <errno.h>
6*433d6423SLionel Sambuc #include <signal.h>
7*433d6423SLionel Sambuc #include <stdlib.h>
8*433d6423SLionel Sambuc #include <unistd.h>
9*433d6423SLionel Sambuc #include <stdio.h>
10*433d6423SLionel Sambuc 
11*433d6423SLionel Sambuc #define SIGNUM 10
12*433d6423SLionel Sambuc int max_error = 4;
13*433d6423SLionel Sambuc #include "common.h"
14*433d6423SLionel Sambuc 
15*433d6423SLionel Sambuc #define ITERATIONS 10
16*433d6423SLionel Sambuc 
17*433d6423SLionel Sambuc volatile int glov, gct;
18*433d6423SLionel Sambuc int subtest;
19*433d6423SLionel Sambuc 
20*433d6423SLionel Sambuc int main(int argc, char *argv []);
21*433d6423SLionel Sambuc void test1a(void);
22*433d6423SLionel Sambuc void parent(void);
23*433d6423SLionel Sambuc void child(int i);
24*433d6423SLionel Sambuc void test1b(void);
25*433d6423SLionel Sambuc void parent1(int childpid);
26*433d6423SLionel Sambuc void func(int s);
27*433d6423SLionel Sambuc void child1(void);
28*433d6423SLionel Sambuc 
main(argc,argv)29*433d6423SLionel Sambuc int main(argc, argv)
30*433d6423SLionel Sambuc int argc;
31*433d6423SLionel Sambuc char *argv[];
32*433d6423SLionel Sambuc {
33*433d6423SLionel Sambuc   int i, m = 0xFFFF;
34*433d6423SLionel Sambuc 
35*433d6423SLionel Sambuc   start(1);
36*433d6423SLionel Sambuc 
37*433d6423SLionel Sambuc   if (argc == 2) m = atoi(argv[1]);
38*433d6423SLionel Sambuc 
39*433d6423SLionel Sambuc   for (i = 0; i < ITERATIONS; i++) {
40*433d6423SLionel Sambuc 	if (m & 00001) test1a();
41*433d6423SLionel Sambuc 	if (m & 00002) test1b();
42*433d6423SLionel Sambuc   }
43*433d6423SLionel Sambuc 
44*433d6423SLionel Sambuc   quit();
45*433d6423SLionel Sambuc   return(-1);			/* impossible */
46*433d6423SLionel Sambuc }
47*433d6423SLionel Sambuc 
test1a()48*433d6423SLionel Sambuc void test1a()
49*433d6423SLionel Sambuc {
50*433d6423SLionel Sambuc   int i, n, pid;
51*433d6423SLionel Sambuc 
52*433d6423SLionel Sambuc   subtest = 1;
53*433d6423SLionel Sambuc   n = 4;
54*433d6423SLionel Sambuc   for (i = 0; i < n; i++) {
55*433d6423SLionel Sambuc 	if ((pid = fork())) {
56*433d6423SLionel Sambuc 		if (pid < 0) {
57*433d6423SLionel Sambuc 			printf("\nTest 1 fork failed\n");
58*433d6423SLionel Sambuc 			exit(1);
59*433d6423SLionel Sambuc 		}
60*433d6423SLionel Sambuc 		parent();
61*433d6423SLionel Sambuc 	} else
62*433d6423SLionel Sambuc 		child(i);
63*433d6423SLionel Sambuc   }
64*433d6423SLionel Sambuc }
65*433d6423SLionel Sambuc 
parent()66*433d6423SLionel Sambuc void parent()
67*433d6423SLionel Sambuc {
68*433d6423SLionel Sambuc 
69*433d6423SLionel Sambuc   int n;
70*433d6423SLionel Sambuc 
71*433d6423SLionel Sambuc   n = getpid();
72*433d6423SLionel Sambuc   wait(&n);
73*433d6423SLionel Sambuc }
74*433d6423SLionel Sambuc 
child(i)75*433d6423SLionel Sambuc void child(i)
76*433d6423SLionel Sambuc int i;
77*433d6423SLionel Sambuc {
78*433d6423SLionel Sambuc   (void) getpid();
79*433d6423SLionel Sambuc   exit(100+i);
80*433d6423SLionel Sambuc }
81*433d6423SLionel Sambuc 
test1b()82*433d6423SLionel Sambuc void test1b()
83*433d6423SLionel Sambuc {
84*433d6423SLionel Sambuc   int i, k;
85*433d6423SLionel Sambuc 
86*433d6423SLionel Sambuc   subtest = 2;
87*433d6423SLionel Sambuc   for (i = 0; i < 4; i++) {
88*433d6423SLionel Sambuc 	glov = 0;
89*433d6423SLionel Sambuc 	signal(SIGNUM, func);
90*433d6423SLionel Sambuc 	if ((k = fork())) {
91*433d6423SLionel Sambuc 		if (k < 0) {
92*433d6423SLionel Sambuc 			printf("Test 1 fork failed\n");
93*433d6423SLionel Sambuc 			exit(1);
94*433d6423SLionel Sambuc 		}
95*433d6423SLionel Sambuc 		parent1(k);
96*433d6423SLionel Sambuc 	} else
97*433d6423SLionel Sambuc 		child1();
98*433d6423SLionel Sambuc   }
99*433d6423SLionel Sambuc }
100*433d6423SLionel Sambuc 
parent1(childpid)101*433d6423SLionel Sambuc void parent1(childpid)
102*433d6423SLionel Sambuc int childpid;
103*433d6423SLionel Sambuc {
104*433d6423SLionel Sambuc 
105*433d6423SLionel Sambuc   int n;
106*433d6423SLionel Sambuc 
107*433d6423SLionel Sambuc   for (n = 0; n < 5000; n++);
108*433d6423SLionel Sambuc   while (kill(childpid, SIGNUM) < 0)	/* null statement */
109*433d6423SLionel Sambuc 	;
110*433d6423SLionel Sambuc   wait(&n);
111*433d6423SLionel Sambuc }
112*433d6423SLionel Sambuc 
func(s)113*433d6423SLionel Sambuc void func(s)
114*433d6423SLionel Sambuc int s;				/* for ANSI */
115*433d6423SLionel Sambuc {
116*433d6423SLionel Sambuc   glov++;
117*433d6423SLionel Sambuc   gct++;
118*433d6423SLionel Sambuc }
119*433d6423SLionel Sambuc 
child1()120*433d6423SLionel Sambuc void child1()
121*433d6423SLionel Sambuc {
122*433d6423SLionel Sambuc   while (glov == 0);
123*433d6423SLionel Sambuc   exit(gct);
124*433d6423SLionel Sambuc }
125*433d6423SLionel Sambuc 
126