123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- last update Jan 2, 2002 (hackie@prohost.org/ilia@prohost.org)
- Shared Memory Operations Extension to PHP
- While developing a search deamon we needed a php based front end
- to communicate the deamon via SHM. PHP already had a shared memory
- extension (sysvshm) written by Christian Cartus <cartus@atrior.de>,
- unfortunately this extension was designed with PHP only in mind and
- offers high level features which are extremely bothersome for basic SHM
- we had in mind. After spending a day trying to reverse engineer and figure
- out the format of sysvshm we decided that it would be much easier to
- add our own extension to php for simple SHM operations, we were right :)).
- the functions are:
-
- int shmop_open(int key, string flags, int mode, int size)
-
- key - the key of/for the shared memory block
- flags - 4 flags are avalible
- a for read only access (sets SHM_RDONLY)
- w for read & write access
- c create or open an existing segment (sets IPC_CREATE)
- n create a new segment and fail if one already exists under same name (sets IPC_CREATE|IPC_EXCL)
- (the n flag is mostly useful for security perpouses, so that you don't end up opening a faked segment
- if someone guesses your key)
- mode - acsess mode same as for a file (0644) for example
- size - size of the block in bytes
-
- returns an indentifier
-
- char shmop_read(int shmid, int start, int count)
- shmid - shmid from which to read
- start - offset from which to start reading
- count - how many bytes to read
-
- returns the data read
- int shmop_write(int shmid, string data, int offset)
- shmid - shmid from which to read
- data - string to put into shared memory
- offset - offset in shm to write from
-
- returns bytes written
-
- int shmop_size(int shmid)
- shmid - shmid for which to return the size
-
- returns the size in bytes of the shm segment
-
-
- int shmop_delete(int shmid)
- marks the segment for deletion, the segment will be deleted when all processes mapping it will detach
- shmid - shmid which to mark for deletion
-
- returns 1 if all ok, zero on failure
-
- int shmop_close(int shmid)
- shmid - shmid which to close
-
- returns zero
-
|