• Domingo 22 de Diciembre de 2024, 13:20

Autor Tema:  Semaforos en C  (Leído 2590 veces)

Jawir

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Semaforos en C
« en: Domingo 3 de Mayo de 2009, 16:41 »
0
Hola tengo el siguiente problema, tengo que implementar operaciones sobre semaforos en este caso crear_semaforo.
Tengo las siguientes estructuras qye me vienen dadas y crear semaforo tiene que hacer:

Crea el semàfor con el nombre y valor inicial indicados Devuelve un entero que representa (idSem) para acceder al semaforo. En caso de error devuelve un numero negativo

Tengo problemas a la hora de copiar el *nom al struct haber si me podeis ayudar

Cuando ejecuto me da error de excepcion de memoria y cuando comento la linea de strcpy no
Gracias




Código: C
  1.  
  2. struct semaforo {
  3.         char nombre[MAX_NOM_SEM+1];     /* Nombre del sem. con sitio para */
  4.         int contador;                   /* valor del sem. */
  5.         int num_aperturas;              /* cuantos lo usan: si 0 libre */
  6.         lista_BCPs lista_bloqueados_sem;/* procesos bloqueados en sem. */
  7. };
  8.  
  9. typedef struct semaforo semaforo;
  10.  
  11. /*
  12.  *  Semaforos del sistema
  13.  */
  14. struct {
  15.         int num_sem_ocupados;                   /* Cuantos existen? */
  16.         lista_BCPs lista_espera_libre;          /* Bloqueados esperando libre */      
  17.    semaforo tabla_semaforos[NUM_SEM];      /* La tabla de semaforos */
  18. } info_semaforos;
  19.  
  20.  

Código: C
  1.  
  2. int sis_crear_sem (char *nom, unsigned int val_ini){
  3.  
  4.    int i;
  5.    int num_sem = info_semaforos.num_sem_ocupados;
  6.  
  7.    for(i=0; i<num_sem; i++){
  8.           if(info_semaforos.tabla_semaforos[i].nombre==nom){
  9.  
  10.                printk("ERROR, Ya existe un semaforo con ese nombre");
  11.                return -1;
  12.       }
  13.    }
  14.  
  15.    strcpy(info_semaforos.tabla_semaforos[num_sem].nombre,nom);
  16.    info_semaforos.tabla_semaforos[num_sem].contador = val_ini;
  17.  
  18.    info_semaforos.num_sem_ocupados++;
  19.  
  20.  
  21. return 0;
  22. }
  23.