diff --git a/run.c b/run.c index 0135af421befa371ab2b798be97475208c69760c..4fdc04f8a9cc1867750b0f42c18e4410fd6416fa 100644 --- a/run.c +++ b/run.c @@ -10,12 +10,42 @@ #include <string.h> #include <pthread.h> -//int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg) ; // 0 si réussi et autre valeur sinon -/* premier valeur est un pointeur vers l'identifiant du thread +typedef struct node{ + long value; + struct node *next; +}node_t; + +typedef struct queue{ + struct node *tail; + int size; +}queue_t; + +struct buffer_rc{ + char *tab[8]; + int size; + int len; +}; + +struct buffer_rc buffer_1 = {.size = 8, .len = 0}; + +struct buffer_cw +{ + queue_t *tab[8]; + int size; + int len; +}; + +struct buffer_cw buffer_2 = {.size = 8, .len = 0}; + + + + +/* //int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg) ; // 0 si réussi et autre valeur sinon +premier valeur est un pointeur vers l'identifiant du thread * deuxieme est l'attribut de thread * le troisieme est la fonction a exucter * dernier argument a passer au thread - */ + void thread_exit(void *ret) ; // supprimer un thread @@ -39,7 +69,9 @@ int pthread_mutex_lock(pthread_mutex_t *mut) ; int pthread_mutex_unlock(pthread_mutex_t *mut) ; //detruire un mutex -int pthread_mutex_destroy(pthread_mutex_t *mut) ; +int pthread_mutex_destroy(pthread_mutex_t *mut) ; */ + + int is_prime(long number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon @@ -56,16 +88,6 @@ int is_prime(long number) { // Vérifie si number est un nombre premier. Return return 1 ; //sinon => VRAI } -typedef struct node{ - long value; - struct node *next; -}node_t; - -typedef struct queue{ - struct node *tail; - int size; -}queue_t; - queue_t* enqueue(queue_t* q, long val){ @@ -117,30 +139,40 @@ queue_t* prime_divs(long number){ } +void *writing(void *param){ -int run (char *input,char *output){ + //getting a list of pr_divs in the buffer #2 - FILE *file1 = NULL; - FILE *file2 = NULL; + queue_t *pr_divs = get_from_buffer_2(); //has to be implemented - char *chaine = malloc(sizeof(char[20])); + FILE *file2 = NULL; //juste pour que le code compile + char *chaine = NULL; //idem - file1 = fopen(input,"r"); - if (file1 == NULL){return -1;} + struct node *current; + current = malloc(sizeof(node_t)); + if (current == NULL){return -1;} + *current = *pr_divs->tail; + current = current->next; - file2 = fopen(output,"w+"); - if (file2 == NULL){ - fclose(file1); - return -1; - } + fprintf(file2,"%s",chaine); + for (int i = 0; i < pr_divs->size; i++) + { + fprintf(file2," %ld",current->value); + current = current->next; + } + fputc('\n',file2); - while (fgets(chaine,sizeof(char[20]),file1) != NULL){ - - struct queue *pr_divs; +} + +void *calculating(void *param){ + + //getting lines in the buffer #1 + char *chaine = get_from_buffer_1(); //has to be implemented + + struct queue *pr_divs; pr_divs = malloc(sizeof(queue_t)); if (pr_divs == NULL){return -1;} - char *c; pr_divs = prime_divs(strtol(chaine,NULL,0)); char *ptr; @@ -148,24 +180,54 @@ int run (char *input,char *output){ ptr = strchr(chaine,'\n'); *ptr = '\0'; - struct node *current; - current = malloc(sizeof(node_t)); - if (current == NULL){return -1;} - *current = *pr_divs->tail; - current = current->next; + //putting pr_divs in buffer #2 + int err = put_in_buffer_2(); //has to be implemented +} - fprintf(file2,"%s",chaine); - for (int i = 0; i < pr_divs->size; i++) - { - fprintf(file2," %ld",current->value); - current = current->next; - } - fputc('\n',file2); +void *reading (void **param){ + FILE *file1 = NULL; + FILE *file2 = NULL; + + char *chaine = malloc(sizeof(char[20])); + + file1 = fopen((const char*) param[0],"r"); + if (file1 == NULL){return -1;} + + file2 = fopen((const char*) param[1],"w+"); + if (file2 == NULL){ + fclose(file1); + return -1; + } + + + while (fgets(chaine,sizeof(char[20]),file1) != NULL){ + + + //put each line in the buffer #1 + + int err = put_in_buffer_1(); //has to be implemented + } fclose(file1); fclose(file2); +} + + +int run (char *input,char *output){ + + pthread_t reader; + pthread_t calculators[4]; + pthread_t writer; + int err; + + char **arg[2]; + arg[0] = input; + arg[1] = output; + + err = pthread_create(&reader,NULL,&reading,&arg); + return 0; diff --git a/run.h b/run.h index 090f7541df3a9a6844e23d63dc9da924854860fe..012db06c68f4506ca058654691e66d0288002efe 100644 --- a/run.h +++ b/run.h @@ -1,19 +1,39 @@ #ifndef RUN #define RUN -int is_div(long number, long i); -int is_prime(long number); typedef struct node{ long value; struct node *next; }node_t; + typedef struct queue{ struct node *tail; int size; }queue_t; + +struct buffer_rc{ + char *tab[8]; + int size; + int len; +}; + +struct buffer_cw +{ + queue_t *tab[8]; + int size; + int len; +}; + +int is_div(long number, long i); +int is_prime(long number); + int enqueue(queue_t* q, long val); queue_t* prime_divs(long number); +void *reading (void *param); +void *calculating(void *param); +void *writing(void *param); + int run (char *input,char *output); #endif \ No newline at end of file