#define NO_FCGI_DEFINES
#include <fcgi_stdio.h>
#include <signal.h>
#include <stdlib.h>

#define HITSPATH "/home/jan/webspace/hits.txt"

static unsigned long hits;

void flush_hits(int sig)
{
	FILE *hitsfile;

	if ((hitsfile = fopen(HITSPATH, "w")) == NULL)
		perror("fopen(w)");
	else if (fprintf(hitsfile, "%lu", hits) < 1)
		perror("fprintf");
	else if (fclose(hitsfile))
		perror("fclose");
	else if (sig != SIGUSR1)
		exit(EXIT_SUCCESS);
	
	if (sig != SIGUSR1)
		exit(EXIT_FAILURE);
}

int main(void)
{
	FILE *hitsfile;

	if ((hitsfile = fopen(HITSPATH, "r")) == NULL)
		perror("fopen(r)");
	else if (fscanf(hitsfile, "%lu", &hits) < 1)
		perror("fscanf");
	else if (fclose(hitsfile))
		perror("fclose");

	signal(SIGTERM, flush_hits);
	signal(SIGUSR1, flush_hits);

	while (FCGI_Accept() >= 0)
		FCGI_printf("Content-Type: text/plain\n\n%lu", ++hits);

	flush_hits(0);

	return 0;
}
