home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 November / CMCD1104.ISO / Software / Complet / Apache / apache_2.0.52-win32-x86-no_ssl.msi / Data.Cab / F277230_apr_shm.h < prev    next >
C/C++ Source or Header  |  2004-02-13  |  4KB  |  127 lines

  1. /* Copyright 2000-2004 The Apache Software Foundation
  2.  *
  3.  * Licensed under the Apache License, Version 2.0 (the "License");
  4.  * you may not use this file except in compliance with the License.
  5.  * You may obtain a copy of the License at
  6.  *
  7.  *     http://www.apache.org/licenses/LICENSE-2.0
  8.  *
  9.  * Unless required by applicable law or agreed to in writing, software
  10.  * distributed under the License is distributed on an "AS IS" BASIS,
  11.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12.  * See the License for the specific language governing permissions and
  13.  * limitations under the License.
  14.  */
  15.  
  16. #ifndef APR_SHM_H
  17. #define APR_SHM_H
  18.  
  19. /**
  20.  * @file apr_shm.h
  21.  * @brief APR Shared Memory Routines
  22.  */
  23.  
  24. #include "apr.h"
  25. #include "apr_pools.h"
  26. #include "apr_errno.h"
  27.  
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif /* __cplusplus */
  31.  
  32. /**
  33.  * @defgroup apr_shm Shared Memory Routines
  34.  * @ingroup APR 
  35.  * @{
  36.  */
  37.  
  38. /**
  39.  * Private, platform-specific data struture representing a shared memory
  40.  * segment.
  41.  */
  42. typedef struct apr_shm_t apr_shm_t;
  43.  
  44. /**
  45.  * Create and make accessable a shared memory segment.
  46.  * @param m The shared memory structure to create.
  47.  * @param reqsize The desired size of the segment.
  48.  * @param filename The file to use for shared memory on platforms that
  49.  *        require it.
  50.  * @param pool the pool from which to allocate the shared memory
  51.  *        structure.
  52.  * @remark A note about Anonymous vs. Named shared memory segments:
  53.  *         Not all plaforms support anonymous shared memory segments, but in
  54.  *         some cases it is prefered over other types of shared memory
  55.  *         implementations. Passing a NULL 'file' parameter to this function
  56.  *         will cause the subsystem to use anonymous shared memory segments.
  57.  *         If such a system is not available, APR_ENOTIMPL is returned.
  58.  * @remark A note about allocation sizes:
  59.  *         On some platforms it is necessary to store some metainformation
  60.  *         about the segment within the actual segment. In order to supply
  61.  *         the caller with the requested size it may be necessary for the
  62.  *         implementation to request a slightly greater segment length
  63.  *         from the subsystem. In all cases, the apr_shm_baseaddr_get()
  64.  *         function will return the first usable byte of memory.
  65.  * 
  66.  */
  67. APR_DECLARE(apr_status_t) apr_shm_create(apr_shm_t **m,
  68.                                          apr_size_t reqsize,
  69.                                          const char *filename,
  70.                                          apr_pool_t *pool);
  71.  
  72. /**
  73.  * Destroy a shared memory segment and associated memory.
  74.  * @param m The shared memory segment structure to destroy.
  75.  */
  76. APR_DECLARE(apr_status_t) apr_shm_destroy(apr_shm_t *m);
  77.  
  78. /**
  79.  * Attach to a shared memory segment that was created
  80.  * by another process.
  81.  * @param m The shared memory structure to create.
  82.  * @param filename The file used to create the original segment.
  83.  *        (This MUST match the original filename.)
  84.  * @param pool the pool from which to allocate the shared memory
  85.  *        structure for this process.
  86.  */
  87. APR_DECLARE(apr_status_t) apr_shm_attach(apr_shm_t **m,
  88.                                          const char *filename,
  89.                                          apr_pool_t *pool);
  90.  
  91. /**
  92.  * Detach from a shared memory segment without destroying it.
  93.  * @param m The shared memory structure representing the segment
  94.  *        to detach from.
  95.  */
  96. APR_DECLARE(apr_status_t) apr_shm_detach(apr_shm_t *m);
  97.  
  98. /**
  99.  * Retrieve the base address of the shared memory segment.
  100.  * NOTE: This address is only usable within the callers address
  101.  * space, since this API does not guarantee that other attaching
  102.  * processes will maintain the same address mapping.
  103.  * @param m The shared memory segment from which to retrieve
  104.  *        the base address.
  105.  */
  106. APR_DECLARE(void *) apr_shm_baseaddr_get(const apr_shm_t *m);
  107.  
  108. /**
  109.  * Retrieve the length of a shared memory segment in bytes.
  110.  * @param m The shared memory segment from which to retrieve
  111.  *        the segment length.
  112.  */
  113. APR_DECLARE(apr_size_t) apr_shm_size_get(const apr_shm_t *m);
  114.  
  115. /**
  116.  * Get the pool used by this shared memory segment.
  117.  */
  118. APR_POOL_DECLARE_ACCESSOR(shm);
  119.  
  120. /** @} */ 
  121.  
  122. #ifdef __cplusplus
  123. }
  124. #endif
  125.  
  126. #endif  /* APR_SHM_T */
  127.