checksignal.c
来自「cygwin, 著名的在win32下模拟unix操作系统的东东」· C语言 代码 · 共 80 行
C
80 行
#include <stdio.h>#include <errno.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>#include "test.h"#include "usctest.h"char *TCID = "checksignal"; /* Test program identifier. */int TST_TOTAL = 3; /* Total number of test cases. */extern int Tst_count; /* Test Case counter for tst_* routines */voidsig_handler (int signo){ errno = EINVAL;}intmain (){ int n, ret; int fds[2]; char buf[10]; struct sigaction act; Tst_count = 0; if (pipe (fds) < 0) tst_brk (TBROK, NULL, NULL, "Create pipe"); /* Reset SA_RESTART flag. */ while ((ret = sigaction (SIGALRM, NULL, &act)) == EINTR) ; if (ret) tst_brk (TBROK, NULL, NULL, "Get signal action structure"); act.sa_flags &= ~SA_RESTART; while ((ret = sigaction (SIGALRM, &act, NULL)) == EINTR) ; if (ret) tst_brk (TBROK, NULL, NULL, "Reset SA_RESTART"); /* Set signal handler using signal(2) call... */ if (signal (SIGALRM, sig_handler) < 0) tst_brk (TBROK, NULL, NULL, "Call signal() to install signal handler"); /* ...and check if signal(2) sets SA_RESTART again. */ while ((ret = sigaction (SIGALRM, NULL, &act)) == EINTR) ; if (ret) tst_brk (TBROK, NULL, NULL, "Get signal action structure"); tst_resm (act.sa_flags & SA_RESTART ? TPASS : TFAIL, "signal() sets SA_RESTART"); /* Reset SA_RESTART flag again. */ act.sa_handler = sig_handler; act.sa_flags &= ~SA_RESTART; while ((ret = sigaction (SIGALRM, &act, NULL)) == EINTR) ; if (ret) tst_brk (TBROK, NULL, NULL, "Reset SA_RESTART"); /* Start timer to force a SIGALRM. */ alarm (1); /* Call read(2) to check if the EINTR errno is correctly preserved, even if the signal handler routine changes errno. */ n = read(fds[0], buf, 10); tst_resm (n < 0 && errno == EINTR ? TPASS : TFAIL, "Set EINTR on interrupted read() call"); /* Check if another errno is correctly returned (here EBADF). */ close (fds[0]); n = read(fds[0], buf, 10); tst_resm (n < 0 && errno == EBADF ? TPASS : TFAIL, "Set EBADF on closed file descriptor"); tst_exit ();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?