diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/gen/Makefile.inc | 5 | ||||
-rw-r--r-- | lib/libc/gen/posixshm.c | 72 | ||||
-rw-r--r-- | lib/libc/gen/shm_open.3 | 192 | ||||
-rw-r--r-- | lib/libc/sys/Makefile.inc | 3 | ||||
-rw-r--r-- | lib/libc/sys/shm_open.2 | 224 |
5 files changed, 161 insertions, 335 deletions
diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc index 68258da..8ea422d 100644 --- a/lib/libc/gen/Makefile.inc +++ b/lib/libc/gen/Makefile.inc @@ -21,7 +21,7 @@ SRCS+= __getosreldate.c __xuname.c \ initgroups.c isatty.c isinf.c isnan.c jrand48.c lcong48.c \ lockf.c lrand48.c mrand48.c nftw.c nice.c \ nlist.c nrand48.c opendir.c \ - pause.c pmadvise.c popen.c posixshm.c pselect.c \ + pause.c pmadvise.c popen.c pselect.c \ psignal.c pw_scan.c pwcache.c \ raise.c readdir.c readpassphrase.c rewinddir.c \ scandir.c seed48.c seekdir.c sem.c semctl.c \ @@ -59,7 +59,7 @@ MAN+= alarm.3 arc4random.3 \ raise.3 rand48.3 readpassphrase.3 rfork_thread.3 \ scandir.3 sem_destroy.3 sem_getvalue.3 sem_init.3 \ sem_open.3 sem_post.3 sem_wait.3 \ - setjmp.3 setmode.3 setproctitle.3 shm_open.3 \ + setjmp.3 setmode.3 setproctitle.3 \ siginterrupt.3 signal.3 sigsetops.3 sleep.3 \ statvfs.3 stringlist.3 \ strtofflags.3 sysconf.3 sysctl.3 syslog.3 tcgetpgrp.3 \ @@ -133,7 +133,6 @@ MLINKS+=setjmp.3 _longjmp.3 setjmp.3 _setjmp.3 setjmp.3 longjmp.3 \ setjmp.3 longjmperr.3 setjmp.3 longjmperror.3 \ setjmp.3 siglongjmp.3 setjmp.3 sigsetjmp.3 MLINKS+=setmode.3 getmode.3 -MLINKS+=shm_open.3 shm_unlink.3 MLINKS+=sigsetops.3 sigaddset.3 sigsetops.3 sigdelset.3 \ sigsetops.3 sigemptyset.3 sigsetops.3 sigfillset.3 \ sigsetops.3 sigismember.3 diff --git a/lib/libc/gen/posixshm.c b/lib/libc/gen/posixshm.c deleted file mode 100644 index 05fc1c9..0000000 --- a/lib/libc/gen/posixshm.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2000 Massachusetts Institute of Technology - * - * Permission to use, copy, modify, and distribute this software and - * its documentation for any purpose and without fee is hereby - * granted, provided that both the above copyright notice and this - * permission notice appear in all copies, that both the above - * copyright notice and this permission notice appear in all - * supporting documentation, and that the name of M.I.T. not be used - * in advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. M.I.T. makes - * no representations about the suitability of this software for any - * purpose. It is provided "as is" without express or implied - * warranty. - * - * THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS - * ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT - * SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include "namespace.h" -#include <sys/types.h> -#include <sys/fcntl.h> -#include <sys/mman.h> -#include <sys/stat.h> - -#include <errno.h> -#include <unistd.h> -#include "un-namespace.h" - -int -shm_open(const char *path, int flags, mode_t mode) -{ - int fd; - struct stat stab; - - if ((flags & O_ACCMODE) == O_WRONLY) - return (EINVAL); - - fd = _open(path, flags, mode); - if (fd != -1) { - if (_fstat(fd, &stab) != 0 || !S_ISREG(stab.st_mode)) { - _close(fd); - errno = EINVAL; - return (-1); - } - - if (_fcntl(fd, F_SETFL, (int)FPOSIXSHM) != 0) { - _close(fd); - return (-1); - } - } - return (fd); -} - -int -shm_unlink(const char *path) -{ - return (unlink(path)); -} diff --git a/lib/libc/gen/shm_open.3 b/lib/libc/gen/shm_open.3 deleted file mode 100644 index b68e85b..0000000 --- a/lib/libc/gen/shm_open.3 +++ /dev/null @@ -1,192 +0,0 @@ -.\" -.\" Copyright 2000 Massachusetts Institute of Technology -.\" -.\" Permission to use, copy, modify, and distribute this software and -.\" its documentation for any purpose and without fee is hereby -.\" granted, provided that both the above copyright notice and this -.\" permission notice appear in all copies, that both the above -.\" copyright notice and this permission notice appear in all -.\" supporting documentation, and that the name of M.I.T. not be used -.\" in advertising or publicity pertaining to distribution of the -.\" software without specific, written prior permission. M.I.T. makes -.\" no representations about the suitability of this software for any -.\" purpose. It is provided "as is" without express or implied -.\" warranty. -.\" -.\" THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS -.\" ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE, -.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT -.\" SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd March 24, 2000 -.Dt SHM_OPEN 3 -.Os -.Sh NAME -.Nm shm_open , shm_unlink -.Nd "shared memory object operations" -.Sh LIBRARY -.Lb libc -.Sh SYNOPSIS -.In sys/types.h -.In sys/mman.h -.Ft int -.Fn shm_open "const char *path" "int flags" "mode_t mode" -.Ft int -.Fn shm_unlink "const char *path" -.Sh DESCRIPTION -The -.Fn shm_open -function opens (or optionally creates) a -.Tn POSIX -shared memory object named -.Fa path . -The -.Fn shm_unlink -function removes a shared memory object named -.Fa path . -.Pp -In the -.Fx -implementation, -.Tn POSIX -shared memory objects are implemented as ordinary files. -The -.Fn shm_open -and -.Fn shm_unlink -act as wrappers around the -.Xr open 2 -and -.Xr unlink 2 -routines, and -.Fa path , -.Fa flags , -and -.Fa mode -arguments are as specified for those functions. -The -.Fa flags -argument is checked to ensure that the access mode specified is not -.Dv O_WRONLY -(which is not defined for shared memory objects). -.Pp -In addition, the -.Fx -implementation causes -.Fn mmap -of a descriptor returned by -.Fn shm_open -to behave as if the -.Dv MAP_NOSYNC -flag had been specified to -.Xr mmap 2 . -(It does so by setting a special file flag using -.Xr fcntl 2 . ) -.Pp -The -.Fn shm_unlink -function makes no effort to ensure that -.Fa path -refers to a shared memory object. -.Sh RETURN VALUES -If successful, -.Fn shm_open -returns a non-negative integer; -.Fn shm_unlink -returns zero. -Both functions return -1 on failure, and set -.Va errno -to indicate the error. -.Sh COMPATIBILITY -The -.Fa path -argument does not necessarily represent a pathname (although it does in this -and most other implementations). -Two processes opening the same -.Fa path -are guaranteed to access the same shared memory object if and only if -.Fa path -begins with a slash -.Pq Ql \&/ -character. -.Pp -Only the -.Dv O_RDONLY , -.Dv O_RDWR , -.Dv O_CREAT , -.Dv O_EXCL , -and -.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. -.Sh ERRORS -The -.Fn shm_open -and -.Fn shm_unlink -functions can fail with any error defined for -.Fn open -and -.Fn unlink , -respectively. -In addition, the following errors are defined for -.Fn shm_open : -.Bl -tag -width Er -.It Bq Er EINVAL -The object named by -.Fa path -is not a shared memory object -(i.e., it is not a regular file). -.It Bq Er EINVAL -The -.Fa flags -argument to -.Fn shm_open -specifies an access mode of -.Dv O_WRONLY . -.El -.Sh SEE ALSO -.Xr mmap 2 , -.Xr munmap 2 , -.Xr open 2 , -.Xr unlink 2 -.Sh STANDARDS -The -.Fn shm_open -and -.Fn shm_unlink -functions are believed to conform to -.St -p1003.1b-93 . -.Sh HISTORY -The -.Fn shm_open -and -.Fn shm_unlink -functions first appeared in -.Fx 4.3 . -.Sh AUTHORS -.An Garrett A. Wollman Aq wollman@FreeBSD.org -(C library support and this manual page) -.Pp -.An Matthew Dillon Aq dillon@FreeBSD.org -.Pq Dv MAP_NOSYNC diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc index 75ffcfc..fe17d7d 100644 --- a/lib/libc/sys/Makefile.inc +++ b/lib/libc/sys/Makefile.inc @@ -83,7 +83,7 @@ MAN+= _exit.2 abort2.2 accept.2 access.2 acct.2 adjtime.2 \ read.2 readlink.2 reboot.2 recv.2 rename.2 revoke.2 rfork.2 rmdir.2 \ rtprio.2 select.2 semctl.2 semget.2 semop.2 send.2 sendfile.2 \ setgroups.2 setpgid.2 setregid.2 setresuid.2 setreuid.2 setsid.2 \ - setuid.2 shmat.2 shmctl.2 shmget.2 shutdown.2 \ + setuid.2 shmat.2 shmctl.2 shmget.2 shm_open.2 shutdown.2 \ sigaction.2 sigaltstack.2 sigpending.2 sigprocmask.2 sigqueue.2 \ sigreturn.2 sigstack.2 sigsuspend.2 sigwait.2 sigwaitinfo.2 \ socket.2 socketpair.2 stat.2 statfs.2 \ @@ -154,6 +154,7 @@ MLINKS+=setpgid.2 setpgrp.2 MLINKS+=setresuid.2 setresgid.2 setresuid.2 getresuid.2 setresuid.2 getresgid.2 MLINKS+=setuid.2 setegid.2 setuid.2 seteuid.2 setuid.2 setgid.2 MLINKS+=shmat.2 shmdt.2 +MLINKS+=shm_open.2 shm_unlink.2 MLINKS+=sigwaitinfo.2 sigtimedwait.2 MLINKS+=stat.2 fstat.2 stat.2 lstat.2 MLINKS+=statfs.2 fstatfs.2 diff --git a/lib/libc/sys/shm_open.2 b/lib/libc/sys/shm_open.2 index b68e85b..5c5d694 100644 --- a/lib/libc/sys/shm_open.2 +++ b/lib/libc/sys/shm_open.2 @@ -28,8 +28,8 @@ .\" .\" $FreeBSD$ .\" -.Dd March 24, 2000 -.Dt SHM_OPEN 3 +.Dd March 20, 2007 +.Dt SHM_OPEN 2 .Os .Sh NAME .Nm shm_open , shm_unlink @@ -46,62 +46,104 @@ .Sh DESCRIPTION The .Fn shm_open -function opens (or optionally creates) a +system call opens (or optionally creates) a .Tn POSIX shared memory object named .Fa path . The -.Fn shm_unlink -function removes a shared memory object named -.Fa path . -.Pp -In the -.Fx -implementation, -.Tn POSIX -shared memory objects are implemented as ordinary files. -The -.Fn shm_open +.Fa flags +argument contains a subset of the flags used by +.Xr open 2 . +An access mode of either +.Dv O_RDONLY +or +.Dv O_RDWR +must be included in +.Fa flags . +The optional flags +.Dv O_CREAT , +.Dv O_EXCL , and -.Fn shm_unlink -act as wrappers around the -.Xr open 2 +.Dv O_TRUNC +may also be specified. +.Pp +If +.Dv O_CREAT +is specified, +then a new shared memory object named +.Fa path +will be created if it does not exist. +In this case, +the shared memory object is created with mode +.Fa mode +subject to the process' umask value. +If both the +.Dv O_CREAT and -.Xr unlink 2 -routines, and -.Fa path , -.Fa flags , +.Dv O_EXCL +flags are specified and a shared memory object named +.Fa path +already exists, +then +.Fn shm_open +will fail with +.Er EEXIST. +.Pp +Newly created objects start off with a size of zero. +If an existing shared memory object is opened with +.Dv O_RDWR +and the +.Dv O_TRUNC +flag is specified, +then the shared memory object will be truncated to a size of zero. +The size of the object can be adjusted via +.Xr ftruncate 2 +and queried via +.Xr fstat 2 . +.Pp +The new descriptor is set to close during +.Xr execve 2 +system calls; +see +.Xr close 2 and -.Fa mode -arguments are as specified for those functions. -The -.Fa flags -argument is checked to ensure that the access mode specified is not -.Dv O_WRONLY -(which is not defined for shared memory objects). +.Xr fcntl 2 . .Pp -In addition, the -.Fx -implementation causes -.Fn mmap -of a descriptor returned by -.Fn shm_open -to behave as if the -.Dv MAP_NOSYNC -flag had been specified to -.Xr mmap 2 . -(It does so by setting a special file flag using -.Xr fcntl 2 . ) +As a FreeBSD extension, +the constant +.Dv SHM_ANON +may be used for the +.Fa path +argument to +.Fn shm_open . +In this case, an anonymous, unnamed shared memory object is created. +Since the object has no name, +it cannot be removed via a subsequent call to +.Fn shm_unlink . +Instead, +the shared memory object will be garbage collected when the last reference to +the shared memory object is removed. +The shared memory object may be shared with other processes by sharing the +file descriptor via +.Xr fork 2 +or +.Xr sendmsg 2 . +Attempting to open an anonymous shared memory object with +.Dv O_RDONLY +will fail with +.Er EINVAL . +All other flags are ignored. .Pp The .Fn shm_unlink -function makes no effort to ensure that -.Fa path -refers to a shared memory object. +system call removes a shared memory object named +.Fa path . +.Pp .Sh RETURN VALUES If successful, .Fn shm_open -returns a non-negative integer; +returns a non-negative integer, +and .Fn shm_unlink returns zero. Both functions return -1 on failure, and set @@ -110,8 +152,8 @@ to indicate the error. .Sh COMPATIBILITY The .Fa path -argument does not necessarily represent a pathname (although it does in this -and most other implementations). +argument does not necessarily represent a pathname (although it does in +most other implementations). Two processes opening the same .Fa path are guaranteed to access the same shared memory object if and only if @@ -139,37 +181,82 @@ on a shared memory object, or on the descriptor returned by is undefined. It is also undefined whether the shared memory object itself, or its contents, persist across reboots. -.Sh ERRORS -The -.Fn shm_open -and -.Fn shm_unlink -functions can fail with any error defined for -.Fn open +.Pp +In FreeBSD, +.Xr read 2 and -.Fn unlink , -respectively. -In addition, the following errors are defined for +.Xr write 2 +on a shared memory object will fail with +.Er EOPNOTSUPP +and neither shared memory objects nor their contents persist across reboots. +.Sh ERRORS +The following errors are defined for .Fn shm_open : .Bl -tag -width Er .It Bq Er EINVAL -The object named by +A flag other than +.Dv O_RDONLY , +.Dv O_RDWR , +.Dv O_CREAT , +.Dv O_EXCL , +or +.Dv O_TRUNC +was included in +.Fa flags . +.It Bq Er EMFILE +The process has already reached its limit for open file descriptors. +.It Bq Er ENFILE +The system file table is full. +.It Bq Er EINVAL +.Dv O_RDONLY +was specified while creating an anonymous shared memory object via +.Dv SHM_ANON . +.It Bq Er EFAULT +The .Fa path -is not a shared memory object -(i.e., it is not a regular file). +argument points outside the process' allocated address space. +.It Bq Er ENAMETOOLONG +The entire pathname exceeded 1023 characters. .It Bq Er EINVAL The -.Fa flags -argument to -.Fn shm_open -specifies an access mode of -.Dv O_WRONLY . +.Fa path +does not begin with a slash +.Pq Ql \&/ +character. +.It Bq Er ENOENT +.Dv O_CREAT +is specified and the named shared memory object does not exist. +.It Bq Er EEXIST +.Dv O_CREAT +and +.Dv O_EXCL +are specified and the named shared memory object dies exist. +.It Bq Er EACCES +The required permissions (for reading or reading and writing) are denied. +.El +.Pp +The following errors are defined for +.Fn shm_unlink : +.Bl -tag -width Er +.It Bq Er EFAULT +The +.Fa path +argument points outside the process' allocated address space. +.It Bq Er ENAMETOOLONG +The entire pathname exceeded 1023 characters. +.It Bq Er ENOENT +The named shared memory object does not exist. +.It Bq Er EACCES +The required permissions are denied. +.Fn shm_unlink +requires write permission to the shared memory object. .El .Sh SEE ALSO +.Xr close 2 , +.Xr ftruncate 2 , +.Xr fstat 2 , .Xr mmap 2 , -.Xr munmap 2 , -.Xr open 2 , -.Xr unlink 2 +.Xr munmap 2 .Sh STANDARDS The .Fn shm_open @@ -184,6 +271,9 @@ and .Fn shm_unlink functions first appeared in .Fx 4.3 . +The functions were reimplemented as system calls using shared memory objects +directly rather than files in +.Fx 7.0 . .Sh AUTHORS .An Garrett A. Wollman Aq wollman@FreeBSD.org (C library support and this manual page) |