github.com/nvi-inc/svipc@v0.1.0/common.go (about)

     1  package svipc
     2  
     3  import (
     4  	"golang.org/x/sys/unix"
     5  )
     6  
     7  const (
     8  	SHM_R = 0400
     9  	SHM_W = 0200
    10  
    11  	SHM_RDONLY = 010000
    12  	SHM_RND    = 020000
    13  	SHM_REMAP  = 040000
    14  	SHM_EXEC   = 0100000
    15  
    16  	SHM_LOCK      = 11
    17  	SHM_UNLOCK    = 12
    18  	SHM_STAT      = 13
    19  	SHM_INFO      = 14
    20  	SHM_DEST      = 01000
    21  	SHM_LOCKED    = 02000
    22  	SHM_HUGETLB   = 04000
    23  	SHM_NORESERVE = 010000
    24  
    25  	IPC_CREAT  = 01000
    26  	IPC_EXCL   = 02000
    27  	IPC_NOWAIT = 04000
    28  
    29  	IPC_RMID = 0
    30  	IPC_SET  = 1
    31  	IPC_STAT = 2
    32  	IPC_INFO = 3
    33  
    34  	SEM_UNDO = 0x1000
    35  	GETPID   = 11
    36  	GETVAL   = 12
    37  	GETALL   = 13
    38  	GETNCNT  = 14
    39  	GETZCNT  = 15
    40  	SETVAL   = 16
    41  	SETALL   = 17
    42  
    43  	SEM_STAT = 18
    44  	SEM_INFO = 19
    45  )
    46  
    47  func Ftok(path string, id uint64) (IpcKey, error) {
    48  	var st unix.Stat_t
    49  	err := unix.Stat(path, &st)
    50  	if err != nil {
    51  		return 0, err
    52  	}
    53  
    54  	return IpcKey((st.Ino & 0xffff) | ((st.Dev & 0xff) << 16) | ((id & 0xff) << 24)), nil
    55  }