#include #include #include #include #include #include #include #include #include #ifndef ROTATION_CYCLE #define ROTATION_CYCLE 60 #endif char* str = "Quick brown fox jumped over lazy dog %d\n"; char buf[50] = { 0 }; int rl=1; int rr=1; pthread_t thr[2]; void* logger_thread ( void* ptr ) { int i=0, r, fd; fd = open ( "/mnt/nfs/file", O_RDWR|O_CREAT, 00600 ); printf ( "logger starting, fd %d\n", fd ); if ( fd <= 0 ) { printf ("%s\n", strerror(errno)); return NULL; } while ( rl ) { r = sprintf ( &buf[0], str, i ); r = write ( fd, &buf[0], strlen(&buf[0]) ); if ( r <= 0 ) { printf ("\n\n%s\n", strerror(errno)); goto exit; } i++; usleep ( 10000 ); } exit: printf ("logger exiting\n"); close (fd); return NULL; } void* logrotate_thread ( void* ptr ) { int r; printf ( "rotater starting\n" ); while ( rr ) { sleep(ROTATION_CYCLE); r = system ( "mv /mnt/nfs/file.4 /mnt/nfs/file.5" ); r = system ( "mv /mnt/nfs/file.3 /mnt/nfs/file.4" ); r = system ( "mv /mnt/nfs/file.2 /mnt/nfs/file.3" ); r = system ( "mv /mnt/nfs/file.1 /mnt/nfs/file.2" ); r = system ( "mv /mnt/nfs/file /mnt/nfs/file.1" ); rl=0; sleep(2); rl=1; pthread_create ( &thr[1], 0, logger_thread, 0 ); } printf ( "rotater exiting\n" ); return NULL; } int main ( int a, char** b ) { pthread_create ( &thr[0], 0, logrotate_thread, 0 ); pthread_create ( &thr[0], 0, logger_thread, 0 ); while ( 1 ) usleep ( 100000 ); return 0; }