unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OSF1-V5.1-alpha)
Page:
Section:
Apropos / Subsearch:
optional field



shmat(2)							     shmat(2)



NAME
  shmat	- Attaches a shared memory region

SYNOPSIS

  #include <&lt;sys/shm.h>&gt;

  void *shmat(
	  int shmid,
	  const	void *shmaddr,
	  int shmflg);

  If programs are being	developed for multiple platforms, application
  developers may want to specify #include statements for <&lt;sys/types.h>&gt; and
  <&lt;sys/ipc.h>&gt; before the one for <&lt;sys/shm.h>&gt;.  The additional #include state-
  ments	are not	required on Tru64 UNIX systems or by ISO or X/Open standards,
  but may be required on other vendors'	systems	that conform to	these stan-
  dards.

STANDARDS

  Interfaces documented	on this	reference page conform to industry standards
  as follows:

  shmat(): XSH4.2

  Refer	to the standards(5) reference page for more information	about indus-
  try standards	and associated tags.

PARAMETERS

  shmid	    Specifies the ID for the shared memory region.  The	ID is typi-
	    cally returned by a	previous shmget() function.

  addr	    Specifies the virtual address at which the process wants to
	    attach the shared memory region.  The process can also specify 0
	    (zero) to have the kernel select an	appropriate address.

  flags	    Specifies the attach flags.	 Possible values are:

	    SHM_RND   If the addr parameter is not 0 (zero), the kernel
		      rounds off the address, if necessary.

	    SHM_RDONLY
		      If the calling process has read permission, the kernel
		      attaches the region for reading only.

DESCRIPTION

  The shmat() function attaches	the shared memory region identified by the
  shmid	parameter to the virtual address space of the calling process.	For
  the addr parameter, the process can specify either an	explicit address or 0
  (zero), to have the kernel select the	address.  If an	explicit address is
  used,	the process can	set the	SHM_RND	flag to	have the kernel	round off the
  address, if necessary.

  Access to the	shared memory region is	determined by the operation permis-
  sions	in the shm_perm.mode member in the region's shmid_ds structure.	 The
  low-order bits in shm_perm.mode are interpreted as follows:

  00400	    Read by user

  00200	    Write by user

  00040	    Read by group

  00020	    Write by group

  00004	    Read by others

  00002	    Write by others

  The calling process is granted read and write	permissions on the attached
  region if at least one of the	following is true:

    +  The effective user ID of	the process is superuser.

    +  The effective user ID of	the process is equal to	shm_perm.cuid or
       shm_perm.uid and	bit 0600  in shm_perm.mode is set.

    +  The effective group ID of the process is	equal to shm_perm.cgid or
       shm_perm.gid and	bit 0060  in shm_perm.mode is set.

    +  Bit 0006	 in shm_perm.mode is set.

  If the process has read permission, it can attach the	region as read only
  by setting the SHM_RDONLY flag.

RETURN VALUES

  Upon successful completion, shmat() increments the value of shm_nattach in
  the data structure associated	with the shared	memory ID of the attached
  shared memory	segment	and returns the	segment's start	address.  If the
  shmat() function fails, the shared memory region is not attached, a value
  of -1	is returned, and errno is set to indicate the error.

ERRORS

  The shmat() function sets errno to the specified values for the following
  conditions:

  [EACCES]  The	calling	process	does not have the appropriate privilege.

  [EINVAL]  The	shmid parameter	does not specify a valid shared	memory region
	    ID;	the addr parameter is not 0 (zero) and not a valid address;
	    or the addr	parameter is not 0 (zero) and not a valid address,
	    and	SHM_RND	is not set.

	    [Tru64 UNIX]  The shmid refers to a	segmented shared memory
	    region and the addr	parameter is not aligned at SSM_SIZE (that
	    is,	(addr %	SSM_SIZE) != 0).

  [EMFILE]  An attempt to attach a shared memory region	exceeded the maximum
	    number of attached regions allowed for any one process.

  [ENOMEM]  There was not enough data space available to attach	the shared
	    memory region.

	    [Tru64 UNIX]  The shmid refers to a	segmented shared memory
	    region whose size is not a multiple	of SSM_SIZE and	where not
	    enough data	space is available for the rounded-up size.




RELATED	INFORMATION

  Commands: sysconfig(8)

  Functions: exec(2), exit(2), fork(2),	shmctl(2), shmdt(2), shmget(2)

  Data structures: shmid_ds(4)

  Standards: standards(5)