/* Возвращает неотрицательный дескриптор в случае успешного завершения, -1 – в случае ошибки */
int shm_unlink(const char
/* Возвращает 0 в случае успешного завершения, -1 – в случае ошибки */
Требования и правила, используемые при формировании аргумента name, были описаны в разделе 2.2.
Аргумент
Аргумент mode задает биты разрешений доступа (табл. 2.3) и используется только при указании флага O_CREAT. Обратите внимание, что в отличие от функций mq_open и sem_open для shm_open аргумент
Возвращаемое значение shm_open представляет собой целочисленный дескриптор, который может использоваться при вызове mmap в качестве пятого аргумента.
Функция shm_unlink удаляет имя объекта разделяемой памяти. Как и другие подобные функции (удаление файла из файловой системы, удаление очереди сообщений и именованного семафора Posix), она не выполняет никаких действий до тех пор, пока объект не будет закрыт всеми открывшими его процессами. Однако после вызова shm_unlink последующие вызовы open, mq_open и sem_open выполняться не будут.
13.3. Функции ftruncate и fstat
Размер файла или объекта разделяемой памяти можно изменить вызовом ftruncate:
#include
int ftruncate(int
/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */
Стандарт Posix делает некоторые различия в определении действия этой функции для обычных файлов и для объектов разделяемой памяти.
1. Для обычного файла: если размер файла превышает значение
2. Для объекта разделяемой памяти: ftruncate устанавливает размер объекта равным значению аргумента
Итак, мы вызываем ftruncate для установки размера только что созданного объекта разделяемой памяти или изменения размера существующего объекта. При открытии существующего объекта разделяемой памяти следует воспользоваться fstat для получения информации о нем:
#include
#include
int fstat(int
/* Возвращает 0 в случае успешного завершения. –1 – в случае ошибки */
В структуре stat содержится больше десятка полей (они подробно описаны в главе 4 [21]), но только четыре из них содержат актуальную информацию, если
struct stat {
…
mode_t st_mode; /* mode: S_I{RW}{USR,GRP,OTH} */
uid_t st_uid; /* UID владельца */
gid_t st_gid; /* GID владельца */
off_t st_size; /* размер в байтах */
…
};
Пример использования этих двух функций будет приведен в следующем разделе.