~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Minix Cross Reference
Minix/test/test1.c


  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 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.