Questo funziona perfettamente per come dice nell'esercizio, ma ancora non ho capito che si deve fare con i threads. Li so usare ma non capisco che richiede l'esercizio 
codice:
#include <stdio.h>
int main(int argc, char **argv) {
char stringa[100], c;
FILE *f;
int i=0, n=0, tmpn=0;
if (argc != 2) {
fprintf(stderr, "Usage: %s <file>\n", argv[0]);
exit(-1);
}
if (!(f=fopen(argv[1], "r"))) {
fprintf(stderr, "ERRORE: Impossibile aprire il file: %s\n", argv[1]);
exit(-1);
}
printf("Inserisci la stringa da ricercare nel file: ");
fscanf(stdin, "%[^\n]", stringa);
c = fgetc(f);
while(1) {
if (c == ' ' || c == '\n' || c == EOF) {
if (tmpn==1) n++;
tmpn=0;
if (c==EOF) break;
}
if (c != stringa[i]) {
if (i==0) c=fgetc(f);
i=0;
continue;
}
c = fgetc(f);
i++;
if (i == strlen(stringa)) {
tmpn=1;
i=0;
}
}
printf("La stringa %s e' presente %d volte nel file\n", stringa, n);
fclose(f);
return 1;
}