[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