Операционные системы. Теория и практика. Замятин А.В. - 266 стр.

UptoLike

Составители: 

266
#include <error.h>
#include <fcntl.h>
#define SVSHM_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int main(int argc, char **argv)
{
int i, id;
struct shmid_ds buff;
unsigned char c, *ptr;
if (argc != 2)
{
printf("usage: shmread <path_to_file>");
return 0;
}
id = shmget(ftok(argv[1], 0), 0, SVSHM_MODE);
ptr = (unsigned char*) shmat(id, NULL, 0);
shmctl(id, IPC_STAT, &buff);
/* check that ptr[0] = 0, ptr[1] = 1, and so on. */
for (i = 0; i < buff.shm_segsz; i++)
if ( (c = *ptr++) != (i % 256)) printf("ptr[%d] = %d", i, c);
return 0;
}
Рассмотрим результат запуска приведенных выше программ при
работе с разделяемой памятью. Вначале создается сегмент разделяемой
памяти длиной 1234 байта. Для идентификации сегмента используем
полное имя исполняемого файла /tmp/test1. Это имя будет передано
функции ftok:
shmget /tmp/test1 1234
ipcs -bmo
IPC status from <running system> as of Thu Jan 8 13:17:06 1998
T ID KEY MODE OWNER GROUP NATTCH SEGSZ
Shared Memory:
m 1 0x0000fl2a --rw-r--r-- rstevens otherl 0 1234