/* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* * prshma . h - - NSPR Anonymous Shared Memory
* *
* * NSPR provides an anonymous shared memory based on NSPR ' s PRFileMap
* * type . The anonymous file - mapped shared memory provides an inheritable
* * shared memory , as in : the child process inherits the shared memory .
* * Compare the file - mapped anonymous shared memory to to a named shared
* * memory described in prshm . h . The intent is to provide a shared
* * memory that is accessable only by parent and child processes . . . .
* * It ' s a security thing .
* *
* * Depending on the underlying platform , the file - mapped shared memory
* * may be backed by a file . . . . surprise ! . . . On some platforms , no
* * real file backs the shared memory . On platforms where the shared
* * memory is backed by a file , the file ' s name in the filesystem is
* * visible to other processes for only the duration of the creation of
* * the file , hopefully a very short time . This restricts processess
* * that do not inherit the shared memory from opening the file and
* * reading or writing its contents . Further , when all processes
* * using an anonymous shared memory terminate , the backing file is
* * deleted . . . . If you are not paranoid , you ' re not paying attention .
* *
* * The file - mapped shared memory requires a protocol for the parent
* * process and child process to share the memory . NSPR provides two
* * protocols . Use one or the other ; don ' t mix and match .
* *
* * In the first protocol , the job of passing the inheritable shared
* * memory is done via helper - functions with PR_CreateProcess ( ) . In the
* * second protocol , the parent process is responsible for creating the
* * child process ; the parent and child are mutually responsible for
* * passing a FileMap string . NSPR provides helper functions for
* * extracting data from the PRFileMap object . . . . See the examples
* * below .
* *
* * Both sides should adhere strictly to the protocol for proper
* * operation . The pseudo - code below shows the use of a file - mapped
* * shared memory by a parent and child processes . In the examples , the
* * server creates the file - mapped shared memory , the client attaches to
* * it .
* *
* * First protocol .
* * Server :
* *
* * fm = PR_OpenAnonFileMap ( dirName , size , FilemapProt ) ;
* * addr = PR_MemMap ( fm ) ;
* * attr = PR_NewProcessAttr ( ) ;
* * PR_ProcessAttrSetInheritableFileMap ( attr , fm , shmname ) ;
* * PR_CreateProcess ( Client ) ;
* * PR_DestroyProcessAttr ( attr ) ;
* * . . . yadda . . .
* * PR_MemUnmap ( addr ) ;
* * PR_CloseFileMap ( fm ) ;
* *
* *
* * Client :
* * . . . started by server via PR_CreateProcess ( )
* * fm = PR_GetInheritedFileMap ( shmname ) ;
* * addr = PR_MemMap ( fm ) ;
* * . . . yadda . . .
* * PR_MemUnmap ( addr ) ;
* * PR_CloseFileMap ( fm ) ;
* *
* *
* * Second Protocol :
* * Server :
* *
* * fm = PR_OpenAnonFileMap ( dirName , size , FilemapProt ) ;
* * fmstring = PR_ExportFileMapAsString ( fm ) ;
* * addr = PR_MemMap ( fm ) ;
* * . . . application specific technique to pass fmstring to child
* * . . . yadda . . . Server uses his own magic to create child
* * PR_MemUnmap ( addr ) ;
* * PR_CloseFileMap ( fm ) ;
* *
* *
* * Client :
* * . . . started by server via his own magic
* * . . . application specific technique to find fmstring from parent
* * fm = PR_ImportFileMapFromString ( fmstring )
* * addr = PR_MemMap ( fm ) ;
* * . . . yadda . . .
* * PR_MemUnmap ( addr ) ;
* * PR_CloseFileMap ( fm ) ;
* *
* *
* * lth . 2 - Jul - 1999 .
* *
* * Note : The second protocol was requested by NelsonB ( 7 / 1999 ) ; this is
* * to accomodate servers which already create their own child processes
* * using platform native methods .
* *
*/
#ifndef prshma_h___
#define prshma_h___
#include "prtypes.h"
#include "prio.h"
#include "prproces.h"
PR_BEGIN_EXTERN_C
/*
* * PR_OpenAnonFileMap ( ) - - Creates an anonymous file - mapped shared memory
* *
* * Description :
* * PR_OpenAnonFileMap ( ) creates an anonymous shared memory . If the
* * shared memory already exists , a handle is returned to that shared
* * memory object .
* *
* * On Unix platforms , PR_OpenAnonFileMap ( ) uses ' dirName ' as a
* * directory name , without the trailing ' / ' , to contain the anonymous
* * file . A filename is generated for the name .
* *
* * On Windows platforms , dirName is ignored .
* *
* * Inputs :
* * dirName - - A directory name to contain the anonymous file .
* * size - - The size of the shared memory
* * prot - - How the shared memory is mapped . See prio . h
* *
* * Outputs :
* * PRFileMap *
* *
* * Returns :
* * Pointer to PRFileMap or NULL on error .
* *
*/
NSPR_API( PRFileMap *)
PR_OpenAnonFileMap(
const char *dirName,
PRSize size,
PRFileMapProtect prot
);
/*
* * PR_ProcessAttrSetInheritableFileMap ( ) - - Prepare FileMap for export
* * to my children processes via PR_CreateProcess ( )
* *
* * Description :
* * PR_ProcessAttrSetInheritableFileMap ( ) connects the PRFileMap to
* * PRProcessAttr with shmname . A subsequent call to PR_CreateProcess ( )
* * makes the PRFileMap importable by the child process .
* *
* * Inputs :
* * attr - - PRProcessAttr , used to pass data to PR_CreateProcess ( )
* * fm - - PRFileMap structure to be passed to the child process
* * shmname - - The name for the PRFileMap ; used by child .
* *
* * Outputs :
* * PRFileMap *
* *
* * Returns :
* * PRStatus
* *
*/
NSPR_API(PRStatus)
PR_ProcessAttrSetInheritableFileMap(
PRProcessAttr *attr,
PRFileMap *fm,
const char *shmname
);
/*
* * PR_GetInheritedFileMap ( ) - - Import a PRFileMap previously exported
* * by my parent process via PR_CreateProcess ( )
* *
* * Description :
* * PR_GetInheritedFileMap ( ) retrieves a PRFileMap object exported from
* * its parent process via PR_CreateProcess ( ) .
* *
* * Inputs :
* * shmname - - The name provided to PR_ProcessAttrSetInheritableFileMap ( )
* *
* * Outputs :
* * PRFileMap *
* *
* * Returns :
* * PRFileMap pointer or NULL .
* *
*/
NSPR_API( PRFileMap *)
PR_GetInheritedFileMap(
const char *shmname
);
/*
* * PR_ExportFileMapAsString ( ) - - Creates a string identifying a PRFileMap
* *
* * Description :
* * Creates an identifier , as a string , from a PRFileMap object
* * previously created with PR_OpenAnonFileMap ( ) .
* *
* * Inputs :
* * fm - - PRFileMap pointer to be represented as a string .
* * bufsize - - sizeof ( buf )
* * buf - - a buffer of length PR_FILEMAP_STRING_BUFSIZE
* *
* * Outputs :
* * buf contains the stringized PRFileMap identifier
* *
* * Returns :
* * PRStatus
* *
*/
NSPR_API( PRStatus )
PR_ExportFileMapAsString(
PRFileMap *fm,
PRSize bufsize,
char *buf
);
#define PR_FILEMAP_STRING_BUFSIZE
128
/*
* * PR_ImportFileMapFromString ( ) - - Creates a PRFileMap from the identifying string
* *
* * Description :
* * PR_ImportFileMapFromString ( ) creates a PRFileMap object from a
* * string previously created by PR_ExportFileMapAsString ( ) .
* *
* * Inputs :
* * fmstring - - string created by PR_ExportFileMapAsString ( )
* *
* * Returns :
* * PRFileMap pointer or NULL .
* *
*/
NSPR_API( PRFileMap * )
PR_ImportFileMapFromString(
const char *fmstring
);
PR_END_EXTERN_C
#endif /* prshma_h___ */
Messung V0.5 in Prozent C=89 H=97 G=93
¤ Dauer der Verarbeitung: 0.8 Sekunden
¤
*© Formatika GbR, Deutschland