Salte la navegación

Programa en Lenguaje C que manipula dos Semáforos. En breve lo comentare.

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

#define SEM_HIJO 0

#define SEM_PADRE 1

main (int argc, int *argv[]) {

int i = 10, semid, pid;

struct sembuf opera;

key_t llave;

llave = ftok ( argv[0], ‘K’ );

if ( ( semid = semget ( llave, 2, IPC_CREAT | 0666 ) ) == -1 ) {

perror ( “semget” );

exit ( -1 );

}

// Cerrar el Semaforo del Hijo

semctl ( semid, SEM_PADRE, SETVAL, 0 );

// Abrir el Semaforo del Padre

semctl ( semid, SEM_PADRE, SETVAL, 1 );

if ( ( pid = fork () ) == -1 ) {

perror ( “fork “);

exit ( -1 );

}

else if ( pid == 0 ) {

while ( i ) {

opera.sem_num = SEM_HIJO;

opera.sem_op = -1;

opera.sem_flg = 0;

semop (semid, &opera, 1);

printf ( “Proceso Hijo: %d\n “, i– );

opera.sem_num = SEM_PADRE;

opera.sem_op = 1;

semop ( semid, &opera, 1 );

}

semctl ( semid, 0, IPC_RMID, 0 );

}

else {

opera.sem_flg = 0;

while ( i ) {

opera.sem_num = SEM_PADRE;

opera.sem_op = -1;

semop ( semid, &opera, 1 );

printf ( “Proceso Padre: %d\n “, i– );

opera.sem_num = SEM_HIJO;

opera.sem_op = 1;

semop ( semid, &opera, 1 );

}

semctl ( semid, 0, IPC_RMID, 0 );

}

}

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#define SEM_HIJO 0
#define SEM_PADRE 1
main (int argc, int *argv[]) {
int i = 10, semid, pid;
struct sembuf opera;
key_t llave;
llave = ftok ( argv[0], ‘K’ );
if ( ( semid = semget ( llave, 2, IPC_CREAT | 0666 ) ) == -1 ) {
perror ( “semget” );
exit ( -1 );
}
// Cerrar el Semaforo del Hijo
semctl ( semid, SEM_PADRE, SETVAL, 0 );
// Abrir el Semaforo del Padre
semctl ( semid, SEM_PADRE, SETVAL, 1 );
if ( ( pid = fork () ) == -1 ) {
perror ( “fork “);
exit ( -1 );
}
else if ( pid == 0 ) {
while ( i ) {
opera.sem_num = SEM_HIJO;
opera.sem_op = -1;
opera.sem_flg = 0;
semop (semid, &opera, 1);
printf ( “Proceso Hijo: %d\n “, i– );
opera.sem_num = SEM_PADRE;
opera.sem_op = 1;
semop ( semid, &opera, 1 );
}
semctl ( semid, 0, IPC_RMID, 0 );
}
else {
opera.sem_flg = 0;
while ( i ) {
opera.sem_num = SEM_PADRE;
opera.sem_op = -1;
semop ( semid, &opera, 1 );
printf ( “Proceso Padre: %d\n “, i– );
opera.sem_num = SEM_HIJO;
opera.sem_op = 1;
semop ( semid, &opera, 1 );
}
semctl ( semid, 0, IPC_RMID, 0 );
}#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#define SEM_HIJO 0
#define SEM_PADRE 1
main (int argc, int *argv[]) {
int i = 10, semid, pid;
struct sembuf opera;
key_t llave;
llave = ftok ( argv[0], ‘K’ );
if ( ( semid = semget ( llave, 2, IPC_CREAT | 0666 ) ) == -1 ) {
perror ( “semget” );
exit ( -1 );
}
// Cerrar el Semaforo del Hijo
semctl ( semid, SEM_PADRE, SETVAL, 0 );
// Abrir el Semaforo del Padre
semctl ( semid, SEM_PADRE, SETVAL, 1 );
if ( ( pid = fork () ) == -1 ) {
perror ( “fork “);
exit ( -1 );
}
else if ( pid == 0 ) {
while ( i ) {
opera.sem_num = SEM_HIJO;
opera.sem_op = -1;
opera.sem_flg = 0;
semop (semid, &opera, 1);
printf ( “Proceso Hijo: %d\n “, i– );
opera.sem_num = SEM_PADRE;
opera.sem_op = 1;
semop ( semid, &opera, 1 );
}
semctl ( semid, 0, IPC_RMID, 0 );
}
else {
opera.sem_flg = 0;
while ( i ) {
opera.sem_num = SEM_PADRE;
opera.sem_op = -1;
semop ( semid, &opera, 1 );
printf ( “Proceso Padre: %d\n “, i– );
opera.sem_num = SEM_HIJO;
opera.sem_op = 1;
semop ( semid, &opera, 1 );
}
semctl ( semid, 0, IPC_RMID, 0 );
}
}
Advertisement

2 Comentarios

  1. Ok Ok, Disculpe Señor… Eran funciones no comandos ^^

    Un error más en mi lista! je je Por cierto, creo que si sería de mucha utilidad que arreglaras lo de la tabulación, así se pierde el estilo! Y si usas color para los comments será magnífico…! TT

    xD Te Amooo :$

  2. Mi vida, wordpress.com te limita en muchas cosas de este tipo. Y no por eso pienso escribir post en puro HTML que aparte ni siquiera me darian el aspecto que yo busco, creo que es hora de comprar el dominio. xD


Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.