| /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
| /* ***** BEGIN LICENSE BLOCK ***** |
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| * |
| * The contents of this file are subject to the Mozilla Public License Version |
| * 1.1 (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * http://www.mozilla.org/MPL/ |
| * |
| * Software distributed under the License is distributed on an "AS IS" basis, |
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
| * for the specific language governing rights and limitations under the |
| * License. |
| * |
| * The Original Code is the Netscape Portable Runtime (NSPR). |
| * |
| * The Initial Developer of the Original Code is |
| * Netscape Communications Corporation. |
| * Portions created by the Initial Developer are Copyright (C) 1999-2000 |
| * the Initial Developer. All Rights Reserved. |
| * |
| * Contributor(s): |
| * |
| * Alternatively, the contents of this file may be used under the terms of |
| * either the GNU General Public License Version 2 or later (the "GPL"), or |
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
| * in which case the provisions of the GPL or the LGPL are applicable instead |
| * of those above. If you wish to allow use of your version of this file only |
| * under the terms of either the GPL or the LGPL, and not to allow others to |
| * use your version of this file under the terms of the MPL, indicate your |
| * decision by deleting the provisions above and replace them with the notice |
| * and other provisions required by the GPL or the LGPL. If you do not delete |
| * the provisions above, a recipient may use your version of this file under |
| * the terms of any one of the MPL, the GPL or the LGPL. |
| * |
| * ***** END LICENSE BLOCK ***** */ |
| |
| /* |
| ** prshm.h -- NSPR Shared Memory |
| ** |
| ** NSPR Named Shared Memory API provides a cross-platform named |
| ** shared-memory interface. NSPR Named Shared Memory is modeled on |
| ** similar constructs in Unix and Windows operating systems. Shared |
| ** memory allows multiple processes to access one or more common shared |
| ** memory regions, using it as an inter-process communication channel. |
| ** |
| ** Notes on Platform Independence: |
| ** NSPR Named Shared Memory is built on the native services offered |
| ** by most platforms. The NSPR Named Shared Memory API tries to |
| ** provide a least common denominator interface so that it works |
| ** across all supported platforms. To ensure that it works everywhere, |
| ** some platform considerations must be accomodated and the protocol |
| ** for using NSPR Shared Memory API must be observed. |
| ** |
| ** Protocol: |
| ** Multiple shared memories can be created using NSPR's Shared Memory |
| ** feature. For each named shared memory, as defined by the name |
| ** given in the PR_OpenSharedMemory() call, a protocol for using the |
| ** shared memory API is required to ensure desired behavior. Failing |
| ** to follow the protocol may yield unpredictable results. |
| ** |
| ** PR_OpenSharedMemory() will create the shared memory segment, if it |
| ** does not already exist, or open a connection that the existing |
| ** shared memory segment if it already exists. |
| ** |
| ** PR_AttachSharedMemory() should be called following |
| ** PR_OpenSharedMemory() to map the memory segment to an address in |
| ** the application's address space. |
| ** |
| ** PR_AttachSharedMemory() may be called to re-map a shared memory |
| ** segment after detaching the same PRSharedMemory object. Be |
| ** sure to detach it when done. |
| ** |
| ** PR_DetachSharedMemory() should be called to un-map the shared |
| ** memory segment from the application's address space. |
| ** |
| ** PR_CloseSharedMemory() should be called when no further use of the |
| ** PRSharedMemory object is required within a process. Following a |
| ** call to PR_CloseSharedMemory() the PRSharedMemory object is |
| ** invalid and cannot be reused. |
| ** |
| ** PR_DeleteSharedMemory() should be called before process |
| ** termination. After calling PR_DeleteSharedMemory() any further use |
| ** of the shared memory associated with the name may cause |
| ** unpredictable results. |
| ** |
| ** Files: |
| ** The name passed to PR_OpenSharedMemory() should be a valid filename |
| ** for a unix platform. PR_OpenSharedMemory() creates file using the |
| ** name passed in. Some platforms may mangle the name before creating |
| ** the file and the shared memory. |
| ** |
| ** The unix implementation may use SysV IPC shared memory, Posix |
| ** shared memory, or memory mapped files; the filename may used to |
| ** define the namespace. On Windows, the name is significant, but |
| ** there is no file associated with name. |
| ** |
| ** No assumptions about the persistence of data in the named file |
| ** should be made. Depending on platform, the shared memory may be |
| ** mapped onto system paging space and be discarded at process |
| ** termination. |
| ** |
| ** All names provided to PR_OpenSharedMemory() should be valid |
| ** filename syntax or name syntax for shared memory for the target |
| ** platform. Referenced directories should have permissions |
| ** appropriate for writing. |
| ** |
| ** Limits: |
| ** Different platforms have limits on both the number and size of |
| ** shared memory resources. The default system limits on some |
| ** platforms may be smaller than your requirements. These limits may |
| ** be adjusted on some platforms either via boot-time options or by |
| ** setting the size of the system paging space to accomodate more |
| ** and/or larger shared memory segment(s). |
| ** |
| ** Security: |
| ** On unix platforms, depending on implementation, contents of the |
| ** backing store for the shared memory can be exposed via the file |
| ** system. Set permissions and or access controls at create and attach |
| ** time to ensure you get the desired security. |
| ** |
| ** On windows platforms, no special security measures are provided. |
| ** |
| ** Example: |
| ** The test case pr/tests/nameshm1.c provides an example of use as |
| ** well as testing the operation of NSPR's Named Shared Memory. |
| ** |
| ** lth. 18-Aug-1999. |
| */ |
| |
| #ifndef prshm_h___ |
| #define prshm_h___ |
| |
| #include "prtypes.h" |
| #include "prio.h" |
| |
| PR_BEGIN_EXTERN_C |
| |
| /* |
| ** Declare opaque type PRSharedMemory. |
| */ |
| typedef struct PRSharedMemory PRSharedMemory; |
| |
| /* |
| ** FUNCTION: PR_OpenSharedMemory() |
| ** |
| ** DESCRIPTION: |
| ** PR_OpenSharedMemory() creates a new shared-memory segment or |
| ** associates a previously created memory segment with name. |
| ** |
| ** When parameter create is (PR_SHM_EXCL | PR_SHM_CREATE) and the |
| ** shared memory already exists, the function returns NULL with the |
| ** error set to PR_FILE_EXISTS_ERROR. |
| ** |
| ** When parameter create is PR_SHM_CREATE and the shared memory |
| ** already exists, a handle to that memory segment is returned. If |
| ** the segment does not exist, it is created and a pointer to the |
| ** related PRSharedMemory structure is returned. |
| ** |
| ** When parameter create is 0, and the shared memory exists, a |
| ** pointer to a PRSharedMemory is returned. If the shared memory does |
| ** not exist, NULL is returned with the error set to |
| ** PR_FILE_NOT_FOUND_ERROR. |
| ** |
| ** INPUTS: |
| ** name -- the name the shared-memory segment is known as. |
| ** size -- the size of the shared memory segment. |
| ** flags -- Options for creating the shared memory |
| ** mode -- Same as is passed to PR_Open() |
| ** |
| ** OUTPUTS: |
| ** The shared memory is allocated. |
| ** |
| ** RETURNS: Pointer to opaque structure PRSharedMemory or NULL. |
| ** NULL is returned on error. The reason for the error can be |
| ** retrieved via PR_GetError() and PR_GetOSError(); |
| ** |
| */ |
| NSPR_API( PRSharedMemory * ) |
| PR_OpenSharedMemory( |
| const char *name, |
| PRSize size, |
| PRIntn flags, |
| PRIntn mode |
| ); |
| /* Define values for PR_OpenShareMemory(...,create) */ |
| #define PR_SHM_CREATE 0x1 /* create if not exist */ |
| #define PR_SHM_EXCL 0x2 /* fail if already exists */ |
| |
| /* |
| ** FUNCTION: PR_AttachSharedMemory() |
| ** |
| ** DESCRIPTION: |
| ** PR_AttachSharedMemory() maps the shared-memory described by |
| ** shm to the current process. |
| ** |
| ** INPUTS: |
| ** shm -- The handle returned from PR_OpenSharedMemory(). |
| ** flags -- options for mapping the shared memory. |
| ** PR_SHM_READONLY causes the memory to be attached |
| ** read-only. |
| ** |
| ** OUTPUTS: |
| ** On success, the shared memory segment represented by shm is mapped |
| ** into the process' address space. |
| ** |
| ** RETURNS: Address where shared memory is mapped, or NULL. |
| ** NULL is returned on error. The reason for the error can be |
| ** retrieved via PR_GetError() and PR_GetOSError(); |
| ** |
| ** |
| */ |
| NSPR_API( void * ) |
| PR_AttachSharedMemory( |
| PRSharedMemory *shm, |
| PRIntn flags |
| ); |
| /* Define values for PR_AttachSharedMemory(...,flags) */ |
| #define PR_SHM_READONLY 0x01 |
| |
| /* |
| ** FUNCTION: PR_DetachSharedMemory() |
| ** |
| ** DESCRIPTION: |
| ** PR_DetachSharedMemory() detaches the shared-memory described |
| ** by shm. |
| ** |
| ** INPUTS: |
| ** shm -- The handle returned from PR_OpenSharedMemory(). |
| ** addr -- The address at which the memory was attached. |
| ** |
| ** OUTPUTS: |
| ** The shared memory mapped to an address via a previous call to |
| ** PR_AttachSharedMemory() is unmapped. |
| ** |
| ** RETURNS: PRStatus |
| ** |
| */ |
| NSPR_API( PRStatus ) |
| PR_DetachSharedMemory( |
| PRSharedMemory *shm, |
| void *addr |
| ); |
| |
| /* |
| ** FUNCTION: PR_CloseSharedMemory() |
| ** |
| ** DESCRIPTION: |
| ** PR_CloseSharedMemory() closes the shared-memory described by |
| ** shm. |
| ** |
| ** INPUTS: |
| ** shm -- The handle returned from PR_OpenSharedMemory(). |
| ** |
| ** OUTPUTS: |
| ** the shared memory represented by shm is closed |
| ** |
| ** RETURNS: PRStatus |
| ** |
| */ |
| NSPR_API( PRStatus ) |
| PR_CloseSharedMemory( |
| PRSharedMemory *shm |
| ); |
| |
| /* |
| ** FUNCTION: PR_DeleteSharedMemory() |
| ** |
| ** DESCRIPTION: |
| ** The shared memory resource represented by name is released. |
| ** |
| ** INPUTS: |
| ** name -- the name the shared-memory segment |
| ** |
| ** OUTPUTS: |
| ** depending on platform, resources may be returned to the underlying |
| ** operating system. |
| ** |
| ** RETURNS: PRStatus |
| ** |
| */ |
| NSPR_API( PRStatus ) |
| PR_DeleteSharedMemory( |
| const char *name |
| ); |
| |
| PR_END_EXTERN_C |
| |
| #endif /* prshm_h___ */ |