-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathftok.go
More file actions
21 lines (18 loc) · 758 Bytes
/
ftok.go
File metadata and controls
21 lines (18 loc) · 758 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Copyright (c) 2020 Meng Huang (mhboy@outlook.com)
// This package is licensed under a MIT license that can be found in the LICENSE file.
// Package ftok provides a way to generate a System V IPC key, suitable for using with
// msgget, semget, or shmget.
package ftok
import (
"syscall"
)
// Ftok uses the given pathname (which must refer to an existing, accessible file) and
// the least significant 8 bits of proj_id (which must be nonzero) to generate
// a key_t type System V IPC key.
func Ftok(pathname string, projectid uint8) (int, error) {
var stat = syscall.Stat_t{}
if err := syscall.Stat(pathname, &stat); err != nil {
return 0, err
}
return int(uint(projectid&0xff)<<24 | uint((stat.Dev&0xff)<<16) | (uint(stat.Ino) & 0xffff)), nil
}