// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build (darwin && !ios) || (linux && !android) // +build darwin,!ios linux,!android package unix_test import ( "log" "golang.org/x/sys/unix" ) func ExampleSysvShmGet() { // create shared memory region of 1024 bytes id, err := unix.SysvShmGet(unix.IPC_PRIVATE, 1024, unix.IPC_CREAT|unix.IPC_EXCL|0o600) if err != nil { log.Fatal("sysv shm create failed:", err) } // warning: sysv shared memory segments persist even after after a process // is destroyed, so it's very important to explicitly delete it when you // don't need it anymore. defer func() { _, err := unix.SysvShmCtl(id, unix.IPC_RMID, nil) if err != nil { log.Fatal(err) } }() // to use a shared memory region you must attach to it b, err := unix.SysvShmAttach(id, 0, 0) if err != nil { log.Fatal("sysv attach failed:", err) } // you should detach from the segment when finished with it. The byte // slice is no longer valid after detaching defer func() { if err = unix.SysvShmDetach(b); err != nil { log.Fatal("sysv detach failed:", err) } }() // Changes to the contents of the byte slice are reflected in other // mappings of the shared memory identifer in this and other processes b[42] = 'h' b[43] = 'i' }