C++程序  |  40行  |  844 B

#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <signal.h>

#include "../memcheck.h"

/* Check that a syscall's POST function gets called if it completes
   due to being interrupted.  nanosleep is used here, because it
   writes a result even if it fails.  wait*() could also be used,
   because they successully complete if interrupted by SIGCHLD.
 */
static void handler(int s)
{
}

int main()
{
	struct timespec req, rem;
	int ret;

	req.tv_sec = 2;
	req.tv_nsec = 0;

	signal(SIGALRM, handler);

	alarm(1);
	ret = nanosleep(&req, &rem);
	
	if (ret != -1 || errno != EINTR) {
		fprintf(stderr, "FAILED: expected nanosleep to be interrupted\n");
	} else {
		VALGRIND_CHECK_VALUE_IS_DEFINED(rem);
		fprintf(stderr, "PASSED\n"); /* assuming CHECK_VALUE_IS_DEFINED doesn't print anything */
	}

	return 0;
}