Page MenuHomeFreeBSD

D9066.id23658.diff
No OneTemporary

D9066.id23658.diff

Index: lib/libc/sys/shm_open.2
===================================================================
--- lib/libc/sys/shm_open.2
+++ lib/libc/sys/shm_open.2
@@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 18, 2013
+.Dd January 6, 2017
.Dt SHM_OPEN 2
.Os
.Sh NAME
@@ -171,26 +171,30 @@
.Dv O_TRUNC
flags may be used in portable programs.
.Pp
-The result of using
-.Xr open 2 ,
-.Xr read 2 ,
-or
-.Xr write 2
-on a shared memory object, or on the descriptor returned by
-.Fn shm_open ,
-is undefined.
-It is also undefined whether the shared memory object itself, or its
-contents, persist across reboots.
-.Pp
-In FreeBSD,
-.Xr read 2
-and
-.Xr write 2
-on a shared memory object will fail with
-.Er EOPNOTSUPP
-and neither shared memory objects nor their contents persist across reboots.
+Writing to shared-memory objects requires that
+.Xr ftruncate 2
+has first been called on them.
+This example fails without the call to
+.Xr ftruncate 2 :
+.Bd -literal -compact
+
+ uint8_t buffer[getpagesize()];
+ ssize_t len;
+ int fd;
+
+ fd = shm_open(SHM_ANON, O_RDWR | O_CREAT, 0600);
+ if (fd < 0)
+ err(EX_OSERR, "%s: shm_open", __func__);
+ if (ftruncate(fd, getpagesize()) < 0)
+ err(EX_IOERR, "%s: ftruncate", __func__);
+ len = pwrite(fd, buffer, getpagesize(), 0);
+ if (len < 0)
+ err(EX_IOERR, "%s: pwrite", __func__);
+ if (len != getpagesize())
+ errx(EX_IOERR, "%s: pwrite length mismatch", __func__);
+.Ed
.Sh ERRORS
-The following errors are defined for
+These errors are defined for
.Fn shm_open :
.Bl -tag -width Er
.It Bq Er EINVAL
@@ -235,7 +239,7 @@
The required permissions (for reading or reading and writing) are denied.
.El
.Pp
-The following errors are defined for
+These errors are defined for
.Fn shm_unlink :
.Bl -tag -width Er
.It Bq Er EFAULT

File Metadata

Mime Type
text/plain
Expires
Sat, Jul 4, 9:22 AM (6 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34662529
Default Alt Text
D9066.id23658.diff (1 KB)

Event Timeline