/* kreator, Thu Sep 14 15:45:22 CEST 2000 random signature displayer DYKHMILY Mia? */ #include #include #include #include #include #include #include #include #include #define SIGFILENAME "sigs.txt" /* format: blabla\n%blablabu\n% */ #define DELIMITER '%' /* ovo je zapravo cookie ending */ int main(void) { caddr_t mmapptr; struct stat buf; int sigfd; long i, j, delimcounter=0, rnddelim, tmp; /* otvori datoteku */ if ((sigfd=open(SIGFILENAME, O_RDONLY, S_IRUSR))==-1) { perror("Error opening file"); return EXIT_FAILURE; } /* saznaj podatke o datoteci */ if (fstat(sigfd, &buf)==-1) { perror("Failure getting file info"); return EXIT_FAILURE; } /* mapiraj cijelu datoteku u raspolozivu memoriju - da, ovo je memory-hungry i mozda ne preporucljivo, no ovo radi i mpg123 */ if ((mmapptr=mmap(0, buf.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, sigfd, 0))==-1) { perror("Error mapping file into memory"); return EXIT_FAILURE; } /* zatvori datoteku */ close(sigfd); /* ok, sad cemo prebrojiti koliko delimitera tamo ima */ for (i=0; i0 && mmapptr[j-2]!=DELIMITER; --j); /* terminiraj string, pomakni za 2 zbog '\n'+'%' */ mmapptr[i-2]=0; /* ispisemo cookie */ printf("Cookie no. %ld/%ld:\n%s\n", rnddelim, delimcounter, mmapptr+j); /* odmapiraj prije izlaska */ munmap(mmapptr, buf.st_size); return EXIT_SUCCESS; }