|
|
1.1 root 1: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2: /*
3: * The contents of this file are subject to the Mozilla Public
4: * License Version 1.1 (the "License"); you may not use this file
5: * except in compliance with the License. You may obtain a copy of
6: * the License at http://www.mozilla.org/MPL/
7: *
8: * Software distributed under the License is distributed on an "AS
9: * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10: * implied. See the License for the specific language governing
11: * rights and limitations under the License.
12: *
13: * The Original Code is the Netscape Portable Runtime (NSPR).
14: *
15: * The Initial Developer of the Original Code is Netscape
16: * Communications Corporation. Portions created by Netscape are
17: * Copyright (C) 1999-2000 Netscape Communications Corporation. All
18: * Rights Reserved.
19: *
20: * Contributor(s):
21: *
22: * Alternatively, the contents of this file may be used under the
23: * terms of the GNU General Public License Version 2 or later (the
24: * "GPL"), in which case the provisions of the GPL are applicable
25: * instead of those above. If you wish to allow use of your
26: * version of this file only under the terms of the GPL and not to
27: * allow others to use your version of this file under the MPL,
28: * indicate your decision by deleting the provisions above and
29: * replace them with the notice and other provisions required by
30: * the GPL. If you do not delete the provisions above, a recipient
31: * may use your version of this file under either the MPL or the
32: * GPL.
33: */
34:
35: /*
36: ** prshm.h -- NSPR Shared Memory
37: **
38: ** NSPR Named Shared Memory API provides a cross-platform named
39: ** shared-memory interface. NSPR Named Shared Memory is modeled on
40: ** similar constructs in Unix and Windows operating systems. Shared
41: ** memory allows multiple processes to access one or more common shared
42: ** memory regions, using it as an inter-process communication channel.
43: **
44: ** Notes on Platform Independence:
45: ** NSPR Named Shared Memory is built on the native services offered
46: ** by most platforms. The NSPR Named Shared Memory API tries to
47: ** provide a least common denominator interface so that it works
48: ** across all supported platforms. To ensure that it works everywhere,
49: ** some platform considerations must be accomodated and the protocol
50: ** for using NSPR Shared Memory API must be observed.
51: **
52: ** Protocol:
53: ** Multiple shared memories can be created using NSPR's Shared Memory
54: ** feature. For each named shared memory, as defined by the name
55: ** given in the PR_OpenSharedMemory() call, a protocol for using the
56: ** shared memory API is required to ensure desired behavior. Failing
57: ** to follow the protocol may yield unpredictable results.
58: **
59: ** PR_OpenSharedMemory() will create the shared memory segment, if it
60: ** does not already exist, or open a connection that the existing
61: ** shared memory segment if it already exists.
62: **
63: ** PR_AttachSharedMemory() should be called following
64: ** PR_OpenSharedMemory() to map the memory segment to an address in
65: ** the application's address space.
66: **
67: ** PR_AttachSharedMemory() may be called to re-map a shared memory
68: ** segment after detaching the same PRSharedMemory object. Be
69: ** sure to detach it when done.
70: **
71: ** PR_DetachSharedMemory() should be called to un-map the shared
72: ** memory segment from the application's address space.
73: **
74: ** PR_CloseSharedMemory() should be called when no further use of the
75: ** PRSharedMemory object is required within a process. Following a
76: ** call to PR_CloseSharedMemory() the PRSharedMemory object is
77: ** invalid and cannot be reused.
78: **
79: ** PR_DeleteSharedMemory() should be called before process
80: ** termination. After calling PR_DeleteSharedMemory() any further use
81: ** of the shared memory associated with the name may cause
82: ** unpredictable results.
83: **
84: ** Files:
85: ** The name passed to PR_OpenSharedMemory() should be a valid filename
86: ** for a unix platform. PR_OpenSharedMemory() creates file using the
87: ** name passed in. Some platforms may mangle the name before creating
88: ** the file and the shared memory.
89: **
90: ** The unix implementation may use SysV IPC shared memory, Posix
91: ** shared memory, or memory mapped files; the filename may used to
92: ** define the namespace. On Windows, the name is significant, but
93: ** there is no file associated with name.
94: **
95: ** No assumptions about the persistence of data in the named file
96: ** should be made. Depending on platform, the shared memory may be
97: ** mapped onto system paging space and be discarded at process
98: ** termination.
99: **
100: ** All names provided to PR_OpenSharedMemory() should be valid
101: ** filename syntax or name syntax for shared memory for the target
102: ** platform. Referenced directories should have permissions
103: ** appropriate for writing.
104: **
105: ** Limits:
106: ** Different platforms have limits on both the number and size of
107: ** shared memory resources. The default system limits on some
108: ** platforms may be smaller than your requirements. These limits may
109: ** be adjusted on some platforms either via boot-time options or by
110: ** setting the size of the system paging space to accomodate more
111: ** and/or larger shared memory segment(s).
112: **
113: ** Security:
114: ** On unix platforms, depending on implementation, contents of the
115: ** backing store for the shared memory can be exposed via the file
116: ** system. Set permissions and or access controls at create and attach
117: ** time to ensure you get the desired security.
118: **
119: ** On windows platforms, no special security measures are provided.
120: **
121: ** Example:
122: ** The test case pr/tests/nameshm1.c provides an example of use as
123: ** well as testing the operation of NSPR's Named Shared Memory.
124: **
125: ** lth. 18-Aug-1999.
126: */
127:
128: #ifndef prshm_h___
129: #define prshm_h___
130:
131: #include "prtypes.h"
132: #include "prio.h"
133:
134: PR_BEGIN_EXTERN_C
135:
136: /*
137: ** Declare opaque type PRSharedMemory.
138: */
139: typedef struct PRSharedMemory PRSharedMemory;
140:
141: /*
142: ** FUNCTION: PR_OpenSharedMemory()
143: **
144: ** DESCRIPTION:
145: ** PR_OpenSharedMemory() creates a new shared-memory segment or
146: ** associates a previously created memory segment with name.
147: **
148: ** When parameter create is (PR_SHM_EXCL | PR_SHM_CREATE) and the
149: ** shared memory already exists, the function returns NULL with the
150: ** error set to PR_FILE_EXISTS_ERROR.
151: **
152: ** When parameter create is PR_SHM_CREATE and the shared memory
153: ** already exists, a handle to that memory segment is returned. If
154: ** the segment does not exist, it is created and a pointer to the
155: ** related PRSharedMemory structure is returned.
156: **
157: ** When parameter create is 0, and the shared memory exists, a
158: ** pointer to a PRSharedMemory is returned. If the shared memory does
159: ** not exist, NULL is returned with the error set to
160: ** PR_FILE_NOT_FOUND_ERROR.
161: **
162: ** INPUTS:
163: ** name -- the name the shared-memory segment is known as.
164: ** size -- the size of the shared memory segment.
165: ** flags -- Options for creating the shared memory
166: ** mode -- Same as is passed to PR_Open()
167: **
168: ** OUTPUTS:
169: ** The shared memory is allocated.
170: **
171: ** RETURNS: Pointer to opaque structure PRSharedMemory or NULL.
172: ** NULL is returned on error. The reason for the error can be
173: ** retrieved via PR_GetError() and PR_GetOSError();
174: **
175: */
176: NSPR_API( PRSharedMemory * )
177: PR_OpenSharedMemory(
178: const char *name,
179: PRSize size,
180: PRIntn flags,
181: PRIntn mode
182: );
183: /* Define values for PR_OpenShareMemory(...,create) */
184: #define PR_SHM_CREATE 0x1 /* create if not exist */
185: #define PR_SHM_EXCL 0x2 /* fail if already exists */
186:
187: /*
188: ** FUNCTION: PR_AttachSharedMemory()
189: **
190: ** DESCRIPTION:
191: ** PR_AttachSharedMemory() maps the shared-memory described by
192: ** shm to the current process.
193: **
194: ** INPUTS:
195: ** shm -- The handle returned from PR_OpenSharedMemory().
196: ** flags -- options for mapping the shared memory.
197: ** PR_SHM_READONLY causes the memory to be attached
198: ** read-only.
199: **
200: ** OUTPUTS:
201: ** On success, the shared memory segment represented by shm is mapped
202: ** into the process' address space.
203: **
204: ** RETURNS: Address where shared memory is mapped, or NULL.
205: ** NULL is returned on error. The reason for the error can be
206: ** retrieved via PR_GetError() and PR_GetOSError();
207: **
208: **
209: */
210: NSPR_API( void * )
211: PR_AttachSharedMemory(
212: PRSharedMemory *shm,
213: PRIntn flags
214: );
215: /* Define values for PR_AttachSharedMemory(...,flags) */
216: #define PR_SHM_READONLY 0x01
217:
218: /*
219: ** FUNCTION: PR_DetachSharedMemory()
220: **
221: ** DESCRIPTION:
222: ** PR_DetachSharedMemory() detaches the shared-memory described
223: ** by shm.
224: **
225: ** INPUTS:
226: ** shm -- The handle returned from PR_OpenSharedMemory().
227: ** addr -- The address at which the memory was attached.
228: **
229: ** OUTPUTS:
230: ** The shared memory mapped to an address via a previous call to
231: ** PR_AttachSharedMemory() is unmapped.
232: **
233: ** RETURNS: PRStatus
234: **
235: */
236: NSPR_API( PRStatus )
237: PR_DetachSharedMemory(
238: PRSharedMemory *shm,
239: void *addr
240: );
241:
242: /*
243: ** FUNCTION: PR_CloseSharedMemory()
244: **
245: ** DESCRIPTION:
246: ** PR_CloseSharedMemory() closes the shared-memory described by
247: ** shm.
248: **
249: ** INPUTS:
250: ** shm -- The handle returned from PR_OpenSharedMemory().
251: **
252: ** OUTPUTS:
253: ** the shared memory represented by shm is closed
254: **
255: ** RETURNS: PRStatus
256: **
257: */
258: NSPR_API( PRStatus )
259: PR_CloseSharedMemory(
260: PRSharedMemory *shm
261: );
262:
263: /*
264: ** FUNCTION: PR_DeleteSharedMemory()
265: **
266: ** DESCRIPTION:
267: ** The shared memory resource represented by name is released.
268: **
269: ** INPUTS:
270: ** name -- the name the shared-memory segment
271: **
272: ** OUTPUTS:
273: ** depending on platform, resources may be returned to the underlying
274: ** operating system.
275: **
276: ** RETURNS: PRStatus
277: **
278: */
279: NSPR_API( PRStatus )
280: PR_DeleteSharedMemory(
281: const char *name
282: );
283:
284: PR_END_EXTERN_C
285:
286: #endif /* prshm_h___ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.