Skip to content

Latest commit

 

History

History
 
 

shmop

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
last update Jan 2, 2002 ([email protected]/[email protected])

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 <[email protected]>,
	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