Книга: Программирование для Linux. Профессиональный подход

Листинг 5.1. (shm.c) Пример совместного использования памяти

Листинг 5.1. (shm.c) Пример совместного использования памяти

#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
int main() {
 int segment_id;
 char* shared_memory;
 struct shmid_ds shmbuffer;
 int segment_size;
 const int shared_segment_size = 0x6400;
 /* Выделение совместно используемого сегмента. */
 segment_id =
  shmget(IPC_PRIVATE, shared_segment_size,
  IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);
 /* Подключение сегмента. */
 shared_memory = (char*)shmat(segment_id, 0, 0);
 printf("shared memory attached at address %pn",
  shared_memory);
 /* Определение размера сегмента. */
 shmctl(segment_id, IPC_STAT, &shmbuffer);
 segment_size = shmbuffer.shm_segsz;
 printf("segment size: %dn", segment_size);
 /* Запись строки в сегмент. */
 sprintf(shared_memory, "Hello, world.");
 /* Отключение сегмента. */
 shmdt(shared_memory);
 /* Повторное подключение сегмента, но по другому адресу! */
 shared_memory =
  (char*)shmat(segment_id, (void*) 0x5000000, 0);
 printf("shared memory reattached at address %pn",
  shared_memory);
 /* Отображение строки, хранящейся в совместно используемой
    памяти. */
 printf("%sn", shared_memory);
 /* Отключение сегмента. */
 shmdt(shared_memory);
 /* Освобождение сегмента. */
 shmctl(segment_id, IPC_RMID, 0);
 return 0;
}

Оглавление книги


Генерация: 5.351. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз