75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Test name: test01.c
 | |
|  *
 | |
|  * Objective: The purpose of this test is to make sure that the timeout mechanisms
 | |
|  * work without errors.
 | |
|  * 
 | |
|  * Description: Executes a select as if it was a sleep and compares the time it
 | |
|  * has been actually sleeping against the specified time in the select call.
 | |
|  * Three cases are tested: first, a timeout specified in seconds, second, a timeout in 
 | |
|  * microseconds, and third, a timeout with more precision than seconds.
 | |
|  *
 | |
|  * Jose M. Gomez
 | |
|  */
 | |
| 
 | |
| #include <sys/types.h>
 | |
| #include <sys/select.h>
 | |
| #include <sys/time.h>
 | |
| #include <time.h>
 | |
| #include <stdio.h>
 | |
| #include <errno.h>
 | |
| #include <string.h>
 | |
| 
 | |
| #define SECONDS 3
 | |
| #define USECONDS 3000000L
 | |
| 
 | |
| int main(void) {
 | |
| 	int r;
 | |
| 	time_t start, end;	/* variables for timing */ 
 | |
| 	struct timeval timeout;	/* timeout structure */
 | |
| 
 | |
| 	/* Set timeout for 3 seconds */
 | |
| 	timeout.tv_sec = SECONDS;
 | |
| 	timeout.tv_usec = 0;
 | |
|    	printf("Sleeping now for %d seconds...\n", SECONDS);
 | |
| 	/* Record time before starting */
 | |
| 	start = time(NULL);
 | |
| 	r = select(0, NULL, NULL, NULL, &timeout); 
 | |
| 	printf("select return code: %d error: %s\n",
 | |
| 		r, strerror(errno));
 | |
| 	end = time(NULL);
 | |
| 	printf("For a timeout with select of %d seconds, it took %d actual seconds\n",
 | |
| 		SECONDS, end-start);
 | |
| 
 | |
| 	/* Set timeout for 3 seconds , but specified in microseconds */
 | |
| 
 | |
| 	timeout.tv_sec = 0;
 | |
| 	timeout.tv_usec = USECONDS;
 | |
| 	printf("\n***************************\n");
 | |
|    	printf("Sleeping now for %ld microseconds...\n", USECONDS);
 | |
| 	/* Record time before starting */
 | |
| 	start = time(NULL);
 | |
| 	r = select(0, NULL, NULL, NULL, &timeout); 
 | |
| 	printf("select return code: %d error: %s\n",
 | |
| 		r, strerror(errno));
 | |
| 	end = time(NULL);
 | |
| 	printf("For a timeout with select of %ld useconds, it took %d actual seconds\n",
 | |
| 		USECONDS, end-start);
 | |
| 
 | |
| 	/* Set timeout for 1.5 seconds, but specified in microseconds */
 | |
| 
 | |
| 	timeout.tv_sec = 0;
 | |
| 	timeout.tv_usec = USECONDS/2;
 | |
| 	printf("\n***************************\n");
 | |
|    	printf("Sleeping now for %ld microseconds...\n", USECONDS/2);
 | |
| 	/* Record time before starting */
 | |
| 	start = time(NULL);
 | |
| 	r = select(0, NULL, NULL, NULL, &timeout); 
 | |
| 	printf("select return code: %d error: %s\n",
 | |
| 		r, strerror(errno));
 | |
| 	end = time(NULL);
 | |
| 	printf("For a timeout with select of %ld useconds, it took %d actual seconds\n",
 | |
| 		USECONDS/2, end-start);
 | |
| 	return 0;
 | |
| }
 | 
