signal signal c include stdio h include signal Slides: 34 Download presentation Η συνάρτηση signal – παράδειγμα [signal. c] #include <stdio. h> #include <signal. h> void sigusr(int signo) { if (signo == SIGUSR 1) printf("Caught signal USR 1n"); else if (signo == SIGUSR 2) printf("Caught signal USR 2n"); else fprintf(stderr, "Unknown signal %d in sigusrn", signo); return; } int main(void) { int i; printf("Signals example pid = %ldn", (long)getpid()); if (signal(SIGUSR 1, sigusr) == SIG_ERR) fprintf(stderr, "Cannot catch SIGUSR 1n"); if (signal(SIGUSR 2, sigusr) == SIG_ERR) fprintf(stderr, "Cannot catch SIGUSR 2n"); for (i = 1; i < 20; i++) sleep(1); return 0; } Kill – Παράδειγμα [ckill. c] void sighdl(int signo) { printf("pid %d: Signal %d receivedn", getpid(), signo); signal(signo, sighdl); } int main(void) { pid_t childpid; signal(SIGINT, sighdl); signal(SIGSEGV, sighdl); signal(SIGUSR 1, sighdl); if ((childpid = fork()) == -1) {perror("Cannot fork"); exit(1); } else if (childpid == 0) { /* child */ kill(getppid(), SIGINT); kill(getppid(), SIGSEGV); kill(getppid(), SIGUSR 1); return 0; } waitpid(childpid, NULL, 0); return 0; } Alarm – Παράδειγμα [alarm. c] void sigalrm(int signo) { return; } int main(void) { char reply[128]; int n; signal(SIGALRM, sigalrm); printf("Enter the password in 5 sec: "); fflush(stdout); alarm(5); if ((n = read(STDIN_FILENO, reply, 128)) < 0) { if (errno == EINTR) { printf("nn** Time expired. Ka-boom! **nn"); return 1; } } alarm(0); reply[n] = '