Usando shared memory
Publicado por Perfil removido 23/11/2004
[ Hits: 8.753 ]
O GNU/Linux (e todo SO respeitável) oferece um recurso interessante para quem quer criar programas que conversem entre si. Esse recurso é a memória compartilhada, ou shared memory. Esse primeiro programa cria uma área de memória compartilhada que pode ser acessada por qualquer programa, desde que respeite as políticas de permissão, e é claro, saiba a chave, ou key, da área compartilhada. Num segundo programa estarei mostrando como se faz o acesso a essa área.
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
char *s;
int run = 1;
void
exit_handler(int signum)
{
run = 0;
}
void
usr1_handler(int signum)
{
printf("%s\n", s);
}
main()
{
int shmid;
struct shmid_ds buf;
struct sigaction sig;
char *s;
sig.sa_flags = 0;
sigemptyset(&sig.sa_mask);
sig.sa_handler = exit_handler;
sigaction(SIGTERM, &sig, NULL);
sig.sa_handler = usr1_handler;
sigaction(SIGUSR1, &sig, NULL);
shmid = shmget(0xFAB10, 100, IPC_CREAT | 0600);
if ( shmid == -1 )
{
printf("can't creat shared memory\n");
perror("shmget");
exit(1);
}
if ( shmctl(shmid, IPC_STAT, &buf) != 0 )
{
printf("can't stat shared memory\n");
perror("shmctl");
exit(2);
}
s = (char *) shmat(shmid, 0, 0);
if ( s == (void *)-1 )
{
printf("can't attach shared memory\n");
perror("shmat");
exit(3);
}
strcpy(s, "ola mundo");
while( run )
;
shmdt(s);
shmctl(shmid, IPC_RMID, 0);
exit(0);
}
Gerenciamento de Área de Alocação Dinâmica (Listas Encadeadas)
Árvore B com Arquivos (inserção e pesquisa)
Estrutura de dados: Lista dinâmica duplamente encadeada
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Instalar Dual Boot, Linux+Windows. (6)
Conky, alerta de temperatura alta (17)
De volta para o futuro - ou melhor, para o presente (parte 2) (3)









