• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

wrproject

[C] Sistema envio mensagens utilizando Semáforos e Shared Memory em Linux

1 mensagem neste tópico

Boas pessoal,há muito que nao postava por aqui,mas arranjei algum tempo pra mostrar-vos um exemplo de um sistema de envio mensagens utilizando Semáforos e Filas de mensagens.

É de relembrar que este código só funciona em linux.

SERVIDOR

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>

struct sembuf UP={0,1,0};
struct sembuf DOWN={0,-1,0};
int id;

void _UP()
{

semop(id,&UP,1);

}

void _DOWN()
{

semop(id,&DOWN,1);

}

int main(int argc,char** args)
{

int id_m=shmget(301,100*sizeof(char),0600|IPC_CREAT);
char* str=shmat(id_m,0,0);

id=semget(300,1,0600 | IPC_CREAT);


//inicializar o semaforo a 1
semctl(id,0,SETVAL,0);

while(1)
{


_DOWN();
printf("%s\n",str);


}

return 0;
}

Cliente

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>

struct sembuf UP={0,1,0};
struct sembuf DOWN={0,-1,0};
int id;

void _UP()
{

semop(id,&UP,1);

}

void _DOWN()
{

semop(id,&DOWN,1);

}

int main(int argc,char** args)
{
int id_m=shmget(301,100*sizeof(char),0600|IPC_CREAT);
char* str=shmat(id_m,0,0);

id=semget(300,1,0600 | IPC_CREAT);


while(1)
{
printf("mensagem:\n");
gets(str);
_UP();

}
printf("ok\n");



return 0;
}

Para testarem devem executar primeiro o server,que será responsavel por receber e mostrar as mensagens,e de seguida executem o cliente.

Qualquer dúvida/critica é só dizer.  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora