
#define _GNU_SOURCE

#include <sys/types.h>
#include <signal.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#define NUM_CHILDREN 8


int check_zero(char *buf, int size)
{
	int *iptr;

	iptr = (int *)buf;

	while (size > 0) {
		if (*iptr++ != 0) {
			fprintf(stderr, "non zero buffer at buf[%d]\n",
				((char *)iptr) - buf);
			return 1;
		}
		size -= 4;
	}
	return 0;	/* all zeros */
}

int read_eof(char *filename)
{
	int fd;
	int i;
	int r;
	char buf[4096];

	while ((fd = open(filename, O_RDONLY)) < 0) {
		sleep(1);	/* wait for file to be created */
	}

	for (i = 0 ; i < 10000000; i++) {
		off_t offset;
		int bufoff;

		offset = lseek(fd, SEEK_END, 0);
		r = read(fd, buf, 4096);
		if (r > 0) {
			if ((bufoff = check_zero(buf, 4096))) {
				fprintf(stderr, "non-zero read at offset %d\n",
					offset + bufoff);
				exit(1);
			}
		}
	}
	fprintf(stderr, "read_checkzero done\n");
}


main(int argc, char **argv)
{
	int fd;
	int pid[NUM_CHILDREN];
	int num_children = 1;
	int i;
	char *filename = "file";

	read_eof(filename);
}
