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 + -
显示快捷键?