#include <limits.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[]) {
// elimine 1 génère la suite des entiers en sortie...
if (!strcmp(argv[1],"1")) {
// on écrit "1" dans le fichier
FILE *f = fopen("premiers","w+");
fprintf(f,"%d\n",1);
fclose(f);
// On génère la suite des entiers
for (int i=2; i<100000/*INT_MAX*/; i++) // devrait être INT_MAX, mais pour tester...
write(STDOUT_FILENO,&i,sizeof(i)); // on envoie le codage natif d'un entier
exit(0);
}
// elimine 0, mange les entiers en entrée...
if (*argv[1]=='0') {
int n;
while (read(STDIN_FILENO,&n,sizeof(n))>0);
exit(0);
}
// le cas general pour elimine
int n;
if (read(STDIN_FILENO,&n,sizeof(n))>0) {
// le premier entier lu sur l'entrée est écrit dans le fichier
FILE *f = fopen("premiers","a");
fprintf(f,"%d\n",n);
fclose(f);
int i;
// On lit autant d'entiers qu'il y en a en entrée...
while (read(STDIN_FILENO,&i,sizeof(i))>0) {
// Si l'entier n'est pas un multiple du premier lu, alors on l'écrit en sortie
if (i%n!=0) write(STDOUT_FILENO,&i,sizeof(i)); // codage natif en sortie
}
}
exit(0);
}