[sisyphus] Shared memory - HELP PLEASE!
Grigory Batalov
bga-no-spam на kovgok.ru
Чт Мар 25 09:42:45 MSK 2004
On Wed, 24 Mar 2004 23:36:15 -0500
Ivan Adzhubey <iadzhubey at rics.bwh.harvard.edu> wrote:
> Видимо придется все же самому разбираться. Может кто-нибудь поделится
> исходниками чего-то работающего с shm, что у него самого - работает? Или хотя
> бы фрагментом. Буду признателен.
У меня сохранился небольшой тест. Кажется, без ошибок =).
Во время sleep(5) запустите ipcs - увидите выделенный 1К.
$ gcc -g -Wall -O2 -o shmtest shmtest.c
$ ./shmtest &
$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1245187 bga 700 1048576 1
--
Григорий Баталов,
начальник бюро
системного администрирования
ОАО "Ковдорский ГОК"
+7-(81535)-76036
-------------- next part --------------
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
int shmid = -1;
char *result;
shmid = shmget(IPC_PRIVATE, 1024*1024, IPC_CREAT|0700);
if(shmid == -1) {
perror("shmget");
exit(EXIT_FAILURE);
}
result = (char *)shmat(shmid, NULL, 0);
if(result == (char *)-1) {
int save_errno = errno;
if(shmctl(shmid, IPC_RMID, NULL) == -1) {
perror("shmctl");
}
errno = save_errno;
perror("shmat");
exit(EXIT_FAILURE);
}
sleep(5);
if(shmctl(shmid, IPC_RMID, NULL) == -1) {
perror("shmctl");
exit(EXIT_FAILURE);
}
if(shmdt(result) == -1) {
perror("shmdt");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
Подробная информация о списке рассылки Sisyphus