Minix1.1/user/test/test3.c
#include "signal.h"
int parsigs, parpid, parcum;
int sigct, cumsig, errct;
main()
{
int i;
printf("Test 3 ");
for (i = 0; i < 9; i++) {
test91();
test92();
}
if (cumsig != 9) e(3);
if (errct == 0)
printf("ok\n");
else
printf("%d errors\n", errct);
}
test90()
{
extern catch();
int n, pid;
parpid = getpid();
signal(10, catch);
if (pid = fork()) {
while(parsigs == 0) ;
if (kill(pid, 9) < 0) e(1);
wait(&n);
if (n != 9) e(2);
} else {
kill(parpid, 10);
pause();
}
}
catch()
{
parsigs++;
parcum++;
}
e(n)
int n;
{
printf("Error %d ",n);
errct++;
perror("");
}
test91()
{
int fd[2], n, sigpip();
char buf[4];
sigct = 0;
signal(SIGPIPE, sigpip);
pipe(fd);
if (fork()) {
/* Parent */
close(fd[0]);
while (sigct == 0) {
write(fd[1], buf,1);
}
wait(&n);
} else {
/* Child */
close(fd[0]);
close(fd[1]);
exit(0);
}
}
sigpip()
{
sigct++;
cumsig++;
}
test92()
{
int pid, n;
signal(SIGQUIT, SIG_DFL);
if (fork()) {
if (fork()) {
if (fork()) {
if (fork()) {
signal(SIGQUIT, SIG_IGN);
kill(0, SIGQUIT);
wait(&n);
wait(&n);
wait(&n);
wait(&n);
} else {
pause();
}
} else {
pause();
}
} else {
pause();
}
} else {
pause();
}
}