#include #include #include #include #include #include #include int main(int argc,char *argv[]) { int fd; char *addr; char *pointer; char *end; char bt[256]; struct stat sb; int i; int count = 0; if (argc < 2) { fprintf (stderr, "Usage: treti file\n"); return 1; } fd = open(argv[1], O_RDONLY); if (fd == -1) { fprintf (stderr, "Can't open file %s\n", argv[1]); return 2; } if (fstat(fd, &sb) == -1) { /* To obtain file size */ fprintf (stderr, "Can't get file size!\n"); return 2; } addr = mmap (NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (addr == MAP_FAILED) { fprintf (stderr, "Can't map file\n"); return 2; } for (i = 0; i < 256; i++) bt[i] = 0; bt[' '] = bt['\t'] = bt['\n'] = 1; for (pointer = addr, end = addr + sb.st_size; pointer < end; pointer++) { if (*(pointer + 1) == 'f' && *(pointer + 2) == 'i' && *(pointer + 3) == 'l' && *(pointer + 4) == 'e' && bt[*(pointer + 5)] && bt[*pointer]) { count++; } } printf ("%d\n", count); return 0; }