104 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * This is just some code behind the curtain.
 | |
|  * You really don't need to touch this.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <sys/time.h>
 | |
| #include <sys/types.h>
 | |
| #include <unistd.h>
 | |
| #include <errno.h>
 | |
| 
 | |
| #include "helpers.h"
 | |
| 
 | |
| int do_quit = 0;
 | |
| int do_reload = 0;
 | |
| 
 | |
| int load_config(void) {
 | |
| 	static char firsttime_message[] = "Loading";
 | |
| 	static char subsequent_message[] = "Reloading";
 | |
| 	static char *message = firsttime_message;
 | |
| 
 | |
| 	fprintf(stderr, "%s configuration... ", message);
 | |
| 	fprintf(stderr, "done.\n");
 | |
| 
 | |
| 	message = subsequent_message;
 | |
| 	do_reload = 0;
 | |
| 
 | |
| 	return 1;
 | |
| }
 | |
| 
 | |
| int main_loop(void) {
 | |
| 	fd_set rfds;
 | |
| 	struct timeval tv;
 | |
| 	int retval;
 | |
| 	char buf[1024];
 | |
| 	ssize_t len;
 | |
| 
 | |
| #if 0
 | |
| 	/* fork() to the background */
 | |
| 	if(fork()) return 0;
 | |
| #endif
 | |
| 
 | |
| 	fprintf(stderr, "I'm just a simple daemon, my PID is: %i\n",
 | |
| 		getpid());
 | |
| 
 | |
| 	while (!do_quit) {
 | |
| 		/* 
 | |
| 		 * Let's just do our really simple job:
 | |
| 		 * Copy stdin to stdout (just another cat(1)).
 | |
| 		 */
 | |
| 
 | |
| 		if (do_reload) {
 | |
| 			load_config();
 | |
| 		}
 | |
| 
 | |
| 		/* Watch stdin (fd 0) to see when it has input. */
 | |
| 		FD_ZERO(&rfds);
 | |
| 		FD_SET(0, &rfds);
 | |
| 
 | |
| 		/* Wait up to five seconds. */
 | |
| 		tv.tv_sec = 5;
 | |
| 		tv.tv_usec = 0;
 | |
| 
 | |
| 		retval = select(1, &rfds, NULL, NULL, &tv);
 | |
| 		/* Don't rely on the value of tv now! */
 | |
| 
 | |
| 		if (retval == -1) {
 | |
| 			if (errno == EINTR) {
 | |
| 				continue;
 | |
| 			}
 | |
| 
 | |
| 			perror("select()");
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| 		if (retval == 0) {
 | |
| 			/* fprintf(stderr, "Timeout reached.\n"); */
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| 		if (!FD_ISSET(0, &rfds)) {
 | |
| 			fprintf(stderr, "BUG: Empty read-set, this should"
 | |
| 				" never happen. Never ever. Really! :-)\n");
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| 		len = read(0, buf, sizeof(buf) - 1);
 | |
| 		if (len < 0) {
 | |
| 			perror("read()");
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| 		buf[len] = 0;
 | |
| 		printf("%s", buf);
 | |
| 
 | |
| 		if (len == 0) {
 | |
| 			do_quit = 1;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return 1;
 | |
| }
 |