Прототип системного вызова
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
char *shmat(int shmid, char *shmaddr, int shmflg);
Описание системного вызова
Системный вызов shmat предназначен для включения области разделяемой памяти в адресное пространство текущего процесса. Данное описание не является полным описанием системного вызова, а ограничивается рамками текущего курса. Для полного описания обращайтесь к UNIX man.
Параметр shmid является дескриптором System V IPC для сегмента разделяемой памяти, т.е. значением, которое вернул системный вызов shmget() при создании сегмента или при его поиске по ключу.
В качестве параметра shmaddr в рамках нашего курса мы всегда будем передавать значение NULL, позволяя операционной системе самой разместить разделяемую память в адресном пространстве нашего процесса.
Параметр shmflg в нашем курсе может принимать только два значения: 0 - для осуществления операций чтения и записи над сегментом и SHM_RDONLY - если мы хотим только читать из него. При этом процесс должен иметь соответствующие права доступа к сегменту.
Возвращаемое значение
Системный вызов возвращает адрес сегмента разделяемой памяти в адресном пространстве процесса при нормальном завершении и значение -1 при возникновении ошибки.