shm

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 27, 2023 License: BSD-3-Clause Imports: 2 Imported by: 1

README

shm

Status Go Reference Go Report Card

shm implements System V shared memory functions (shmctl, shmget, shmat, shmdt) in pure Go (except solaris, see #24357).

Installation

go get -u github.com/gen2brain/shm

More

For System V Message Queue IPC (i.e. msgctl, msgget, msgrcv, msgsnd) see ipc.

Documentation

Overview

Package shm implements System V shared memory functions (shmctl, shmget, shmat, shmdt).

Index

Constants

View Source
const (

	// Create key if key does not exist.
	IPC_CREAT = 01000
	// Fail if key exists.
	IPC_EXCL = 02000
	// Return error on wait.
	IPC_NOWAIT = 04000

	// Private key.
	IPC_PRIVATE = 0

	// Attach read-only access.
	SHM_RDONLY = 010000
	// Round attach address to SHMLBA.
	SHM_RND = 020000
	// Take-over region on attach.
	SHM_REMAP = 040000
	// Execution access.
	SHM_EXEC = 0100000

	// Lock segment (root only).
	SHM_LOCK = 1
	// Unlock segment (root only).
	SHM_UNLOCK = 12

	// Remove identifier.
	IPC_RMID = 0
	// Set `ipc_perm` options.
	IPC_SET = 1
	// Get `ipc_perm' options.
	IPC_STAT = 2
)

Constants.

Variables

This section is empty.

Functions

func At

func At(shmId int, shmAddr uintptr, shmFlg int) (data []byte, err error)

At attaches the shared memory segment identified by shmId.

Using At() with shmAddr equal to NULL is the preferred, portable way of attaching a shared memory segment.

func Ctl

func Ctl(shmId int, cmd int, buf *IdDs) (int, error)

Ctl performs the control operation specified by cmd on the shared memory segment whose identifier is given in shmId.

The buf argument is a pointer to a IdDs structure.

func Dt

func Dt(data []byte) error

Dt detaches the shared memory segment.

The to-be-detached segment must be currently attached with shmAddr equal to the value returned by the attaching At() call.

func Get

func Get(key int, size int, shmFlg int) (shmId int, err error)

Get allocates a shared memory segment.

Get() returns the identifier of the shared memory segment associated with the value of the argument key. A new shared memory segment is created if key has the value IPC_PRIVATE or key isn't IPC_PRIVATE, no shared memory segment corresponding to key exists, and IPC_CREAT is specified in shmFlg.

If shmFlg specifies both IPC_CREAT and IPC_EXCL and a shared memory segment already exists for key, then Get() fails with errno set to EEXIST.

func Rm

func Rm(shmId int) error

Rm removes the shared memory segment.

func Size

func Size(shmId int) (int64, error)

Size returns size of shared memory segment.

Types

type IdDs

type IdDs struct {
	// Operation permission struct.
	Perm Perm
	// Size of segment in bytes.
	SegSz uint64
	// Last attach time.
	Atime int64
	// Last detach time.
	Dtime int64
	// Last change time.
	Ctime int64
	// Pid of creator.
	Cpid int32
	// Pid of last shmat/shmdt.
	Lpid int32
	// Number of current attaches.
	Nattch uint64
	// Reserved.
	GlibcReserved4 uint64
	// Reserved.
	GlibcReserved5 uint64
}

IdDs describes shared memory segment.

type Perm

type Perm struct {
	// Key.
	Key int32
	// Owner's user ID.
	Uid uint32
	// Owner's group ID.
	Gid uint32
	// Creator's user ID.
	Cuid uint32
	// Creator's group ID.
	Cgid uint32
	// Read/write permission.
	Mode uint16
	// Padding.
	Pad1 uint16
	// Sequence number.
	Seq uint16
	// Padding.
	Pad2 uint16
	// Padding.
	PadCgo0 [4]byte
	// Reserved.
	GlibcReserved1 uint64
	// Reserved.
	GlibcReserved2 uint64
}

Perm is used to pass permission information to IPC operations.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL