Advertisement
d1cor

semaforos2B.c

Oct 20th, 2016
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. /*******************************************
  2. * Author     : Diego Cordoba / @d1cor      *
  3. * Purpose    : JuncoTIC / UM               *
  4. * Contact    : juncotic.com                *
  5. *******************************************/
  6.  
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9. #include<sys/types.h>
  10. #include<sys/stat.h>
  11. #include<unistd.h>
  12. #include<string.h>
  13. #include<fcntl.h>
  14. #include<errno.h>
  15. #include<sys/ipc.h>
  16. #include<sys/sem.h>
  17. int main(int argc, char** argv) {
  18.  
  19.     int fd;     //recurso compartido
  20.     int i,j;
  21.     char* error;
  22.     int sem_id;
  23.     struct sembuf operacion;
  24.     int clave;
  25.  
  26.  
  27.     if((fd=open("/tmp/file_shared",O_CREAT|O_RDWR,0666))==-1){
  28.         error="open";
  29.         goto err;
  30.     }
  31.  
  32.  
  33.     if((clave=ftok(".",11))<0){
  34.         error="ftok";
  35.         goto err;
  36.     }
  37.  
  38.     if((sem_id=semget(clave,1,0666|IPC_CREAT))<0){
  39.         error="semget";
  40.         goto err;
  41.     }
  42.  
  43.     for(i=0;i<5;i++){
  44.         operacion.sem_num=0;
  45.         operacion.sem_op=-1;
  46.         semop(sem_id,&operacion,1);
  47.         printf("Proceso B escribiendo el archivo\n");
  48.         for(j=0;j<3;j++){   //procesando recurso
  49.             printf(".\n");
  50.             lseek(fd,0,SEEK_END);
  51.             write(fd,"B",1);
  52.             sleep(1);
  53.         }
  54.         printf("Proceso B liberando el archivo\n");
  55.         operacion.sem_num=0;
  56.         operacion.sem_op=1;
  57.         semop(sem_id,&operacion,1);
  58.     }
  59.  
  60.     close(fd);
  61.  
  62.     //borramos el semaforo
  63.     semctl(sem_id,0,IPC_RMID,NULL);
  64.  
  65.     return 0;
  66.  
  67. err:
  68.     fprintf(stderr,"%s (%d) - %s\n",error,errno,strerror(errno));
  69.     exit(1);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement