LinuxParty
NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
A continuación (en el cuerpo extendido) se inserta un programa que permite manejar semáforos desde consola. Colaboración de jjgrodriguez.

/**
Programa de ejemplo de semáforos
Permite interactuar con un conjunto de semáforos desde la línea de comandos
**/
#include
#include
#include
#include
#include
#include
#include
#define IPC_WAIT 0
#define CLAVE 42
union senum {
int val;
};
int main(int argc, char *argv[]) {
int numsem;
int semid;
int r;
// Indice del semŽáforo introducido por teclado
int semindx;
// Valor a sumar introducido por teclado
int valor;
// Operaciones con semŽáforos
struct sembuf op;
union senum extra;
int monitor = 0;
key_t clave;
// Comprobar lŽínea de comandos
numsem = 2;
if (argc != 2) {
printf("Uso: %s []
", argv[0]);
printf("Uso: %s -m
", argv[0]);
printf("Numero de semŽáforos no indicado. Valor por defecto 2.
");
printf(" -m Monitoriza el grupo de semáforos cada 4 seg.
");
} else {
if (strcmp("-m", argv[1]) !=0) {
numsem = atoi(argv[1]);
printf("Creando %i semaforos.
", numsem);
}
else {
monitor = 1;
printf("Monitorizando.
");
}
}
// Crear el grupo de semáforos
clave = ftok("./scon.c", CLAVE);
if (clave == -1) {
perror("Error calculando clave del grupo de semáforos.");
return -1;
}
// Si no existe lo crea, pero si ya existe utiliza el existente
semid = semget(clave, numsem, IPC_CREAT | S_IRUSR | S_IWUSR);
if (semid == -1) {
perror("Error creando grupo - ");
printf("Llave: %i
Semaforos: %i
", clave, numsem);
return -1;
}
// Comprobamos si hay que monitorizar
if (monitor == 1) {
int c;
int v;
while(1) {
sleep(4);
for (c = 0; c < numsem; c++) {
v = semctl(semid, c, GETVAL);
printf("Semaforo: %i Valor %i |", c, v);
}
printf("
");
}
exit(0);
}
printf("Utilizando %i semáforos.
", numsem);
printf("Semáforos incializados a 0.
");
semindx = 0;
// Realizar operaciones
do {
printf("[Indice semáforo - Negativo terminar] >> ");
scanf("%i", &semindx);
printf("[Valor a añadir - + sube / - baja] >> ");
scanf("%i", &valor);
if (semindx > -1) {
op.sem_num = semindx;
op.sem_op = valor;
op.sem_flg = IPC_WAIT;
r = semop(semid, &op, 1);
if ( r == -1)
perror("Error en la operaciŽón. ");
}
} while(semindx > -1);
printf("Destruyendo grupo de semáforos.
");
r = semctl(semid, 0, IPC_RMID);
if (r == -1) {
perror("Error destruyedo grupo.");
} else {
printf("Grupo destruido.
");
}
return 0;
}

-
Espacio
- El primer satélite construido con paneles de madera fue lanzado al espacio
- Lo que quise saber del Universo pero la mala divulgación no contó
- ¿Puede existir vida en el espacio sin un planeta? Un nuevo estudio revela una respuesta sorprendente
- Los competidores de SpaceX se esfuerzan por construir cohetes reutilizables
- Descifraron la señal ¡Wow!: y su resultado no te gustará
- Starlink ya está disponible en todos los vuelos Airbus de Hawaiian Airlines
- Hace 4.500 millones de años, otro planeta impactó contra la Tierra. Hemos encontrado sus restos.
- Estudio Revela que las Civilizaciones Avanzadas en la Vía Láctea Podrían ser Extremadamente Raras
- Plutón no regresará, pero los astrónomos quieren redefinir los planetas nuevamente
- La Voyager 1 regresa a las operaciones científicas normales
- China aterriza con éxito una sonda en la cara oculta de la Luna y comienza a recolectar muestras
- Un estudio confirma la predicción de Einstein: los agujeros negros tienen una "región que se hunde"
- La Voyager 1, la primera nave en el espacio interestelar, puede haberse quedado a oscuras
- Adiós al Ingenuity, Perseverence toma una foto del helicóptero dañado y abandonado en Marte.
- Una Kilonova a años luz de la tierra, representa un potencial peligro para nuestro planeta
Comentarios
me podrias decir de favor de donde tomas esta parte del codigo,o como le hiciste.....
// Crear el grupo de semáforos
clave = ftok("./sc on.c", CLAVE);
if (clave == -1) {
perror("E rror calculando clave del grupo de semáforos.");
return -1;
}si me podrias decir de favor.........
Pásate por: ******www.linuxparty.es/modules.php?name=Forums&file=viewtopic&t=199