SHARE
TWEET

zad3

LazySenpai Dec 10th, 2019 (edited) 93 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <pthread.h>
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6.  
  7. char mutual[100];
  8. int flag[2];
  9. int thread_id[2];
  10. pthread_mutex_t lock;
  11.  
  12. void* read_thread(void *arg) {
  13.     char *file_name = (char *)arg;
  14.     int thread_number;
  15.     if(file_name == "/etc/profile")
  16.         thread_number=0;
  17.     else
  18.         thread_number=1;
  19.  
  20.     thread_id[thread_number]=pthread_self();
  21.  
  22.     FILE* input=fopen(file_name,"r");
  23.  
  24.     while(1) {
  25.         pthread_mutex_lock(&lock);
  26.         if(!fgets(mutual, 100, input)){
  27.             flag[thread_number]= (-1);
  28.             pthread_mutex_unlock(&lock);
  29.             break;
  30.         }
  31.         else{
  32.             flag[thread_number]=1;
  33.         }
  34.         while(flag[thread_number]==1)
  35.             usleep(100);
  36.         pthread_mutex_unlock(&lock);
  37.         usleep(100);
  38.     }
  39. }
  40.  
  41. int main() {
  42.     flag[0]=0;
  43.     flag[1]=0;
  44.     pthread_t reader[2];
  45.     char *prof = "/etc/profile";
  46.     char *pass = "/etc/passwd";
  47.     FILE *fp[2];
  48.     fp[0] = fopen("./KACPER1", "w");
  49.     fp[1] = fopen("./KACPER2", "w");
  50.    
  51.     if (pthread_mutex_init(&lock, NULL) != 0) {
  52.         printf("\n mutex init has failed\n");
  53.         return 1;
  54.     }
  55.  
  56.     pthread_create(&reader[0], NULL, &read_thread, (void *)prof);
  57.     pthread_detach(reader[0]);
  58.     pthread_create(&reader[1], NULL, &read_thread, (void *)pass);
  59.     pthread_detach(reader[1]);
  60.  
  61.     while(1){
  62.         if(flag[0] == 1) {
  63.             fwrite(mutual, sizeof(char), 100, fp[0]);
  64.             printf("%d : %s", thread_id[0], mutual);
  65.             memset(mutual,0,100);
  66.             flag[0] = 0;
  67.         }
  68.         if(flag[1] == 1) {
  69.             fwrite(mutual, sizeof(char), 100, fp[1]);
  70.             printf("%d : %s", thread_id[1], mutual);
  71.             memset(mutual,0,100);          
  72.             flag[1] = 0;
  73.         }
  74.         if(flag[0] == -1 && flag[1] == -1)
  75.             break;
  76.         usleep(100);
  77.     }
  78. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top