#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); }