Usando shared memory
Publicado por Perfil removido 23/11/2004
[ Hits: 8.746 ]
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);
}
Rotina para controle de portas paralelas em C.
Rotação à esquerda árvore Binária
Contar elementos de uma lista encadeada
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como impedir exclusão de arquivos por outros usuários no (Linux)
Cirurgia no Linux Mint em HD Externo via USB
Anúncio do meu script de Pós-Instalação do Ubuntu
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (5)
Formas seguras de instalar Debian Sid (0)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (4)
Alguém executou um rm e quase mata a Pixar! (1)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









