golang.org/x/sys@v0.20.1-0.20240517151509-673e0f94c16d/unix/example_sysvshm_test.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build (darwin && !ios) || (linux && !android) 6 7 package unix_test 8 9 import ( 10 "log" 11 12 "golang.org/x/sys/unix" 13 ) 14 15 func ExampleSysvShmGet() { 16 // create shared memory region of 1024 bytes 17 id, err := unix.SysvShmGet(unix.IPC_PRIVATE, 1024, unix.IPC_CREAT|unix.IPC_EXCL|0o600) 18 if err != nil { 19 log.Fatal("sysv shm create failed:", err) 20 } 21 22 // warning: sysv shared memory segments persist even after after a process 23 // is destroyed, so it's very important to explicitly delete it when you 24 // don't need it anymore. 25 defer func() { 26 _, err := unix.SysvShmCtl(id, unix.IPC_RMID, nil) 27 if err != nil { 28 log.Fatal(err) 29 } 30 }() 31 32 // to use a shared memory region you must attach to it 33 b, err := unix.SysvShmAttach(id, 0, 0) 34 if err != nil { 35 log.Fatal("sysv attach failed:", err) 36 } 37 38 // you should detach from the segment when finished with it. The byte 39 // slice is no longer valid after detaching 40 defer func() { 41 if err = unix.SysvShmDetach(b); err != nil { 42 log.Fatal("sysv detach failed:", err) 43 } 44 }() 45 46 // Changes to the contents of the byte slice are reflected in other 47 // mappings of the shared memory identifer in this and other processes 48 b[42] = 'h' 49 b[43] = 'i' 50 }