Usando shared memory
Publicado por Perfil removido 23/11/2004
[ Hits: 8.800 ]
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);
}
Cálculo de logaritmo de um número por Série de Taylor em C
Jogo Windows Invaders (com gráficos)
Funções com número variável de argumentos
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Recuperando arquivos com o Photorec de discos zoados
Usando o --load-average no Gentoo para evitar OOM Kill
Instalando o COSMIC DE no Gentoo (systemd)
Quando vocês pararam de testar distros? (24)
Ajudante para criar dicas e artigos no VOL (6)
Problemas com o "startx&... no Slackware (13)









