Update the shm_open.2 man page to reflect objective reality.

PR:		215612
Submitted by:	rwatson
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D9066
This commit is contained in:
Warren Block 2017-01-13 19:41:02 +00:00
parent f8f24e9ec2
commit b44047f3df
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=312083

View File

@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd December 18, 2013
.Dd January 13, 2017
.Dt SHM_OPEN 2
.Os
.Sh NAME
@ -171,7 +171,8 @@ and
.Dv O_TRUNC
flags may be used in portable programs.
.Pp
The result of using
.Tn POSIX
specifications state that the result of using
.Xr open 2 ,
.Xr read 2 ,
or
@ -179,19 +180,43 @@ or
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,
However, the
.Fx
kernel implementation explicitly includes support for
.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.
.Xr write 2 .
.Pp
Neither shared memory objects nor their contents persist across reboots.
.Pp
Writes do not extend shared memory objects, so
.Xr ftruncate 2
must be called before any data can be written.
See
.Sx EXAMPLES .
.Sh EXAMPLES
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
.Fn shm_open :
.Fn shm_open
fails with these error codes for these conditions:
.Bl -tag -width Er
.It Bq Er EINVAL
A flag other than
@ -235,8 +260,8 @@ are specified and the named shared memory object does exist.
The required permissions (for reading or reading and writing) are denied.
.El
.Pp
The following errors are defined for
.Fn shm_unlink :
.Fn shm_unlink
fails with these error codes for these conditions:
.Bl -tag -width Er
.It Bq Er EFAULT
The