uiomove man page on DigitalUNIX

Man page or keyword search:  
man Server   12896 pages
apropos Keyword Search (all sections)
Output format
DigitalUNIX logo
[printable version]

uiomove(9r)							   uiomove(9r)

NAME
       uiomove - General: Moves data between user and system virtual space

SYNOPSIS
       #include <sys/uio.h>

       int uiomove(
	       caddr_t kern_buf,
	       int nbytes,
	       struct uio *uio );

ARGUMENTS
       Specifies  a  pointer  to  the  kernel  buffer in system virtual space.
       Specifies the number of bytes of data to be moved.  Specifies a pointer
       to  a  uio  structure.	This  structure describes the current position
       within a logical user buffer in user virtual space.

DESCRIPTION
       The uiomove routine moves data between user and system  virtual	space.
       Data  can  be  moved  in either direction. Accessibility to the logical
       user buffer is verified before the move is made. Accessibility  to  the
       kernel buffer is always assumed.

       The  kernel buffer must always be of sufficient size to accommodate the
       data. It cannot be less than the number of bytes requested to be moved.
       Data corruption or a system panic may result if this condition occurs.

       The size of the logical user buffer, as described by the uio structure,
       may be less than, equal	to,  or	 greater  than	the  number  of	 bytes
       requested.  The	number	of  bytes actually moved is truncated whenever
       this size is not sufficient to fulfill a request. In all	 other	cases,
       only the bytes requested are moved.

       Normally	 there	is no need for kernel modules to set up uio structures
       or worry about their composition or content.  The  uio  structures  are
       usually	set  up	 externally  to	 kernel	 modules.  Their addresses are
       passed in through the dsent table as arguments to module read and write
       routines.   The user logical buffers they describe are accessed only by
       routines external to the module, for example, uiomove. The external uio
       structures are quite often updated by such accesses.

       The  uiomove  routine  always  updates the uio structure to reflect the
       number of bytes actually moved.	The structure  continues  to  describe
       the current position within the logical user buffer. The structure mem‐
       bers that are subject to change are listed in the SIDE EFFECTS section.

NOTES
       You can also use the uiomove routine to move data  only	within	system
       virtual	space.	In  such  cases,  you still specify a pointer to a uio
       structure. However, in these cases, the structure describes  a  logical
       buffer in system virtual space.

SIDE EFFECTS
       The  uiomove routine can update the following members of the uio struc‐
       ture: Specifies the address of  the  current  logical  buffer  segment.
       Specifies  the  number of remaining logical buffer segments.  Specifies
       the size of the remaining logical buffer.  Specifies the current offset
       into the full logical buffer.

       The  uiomove  routine  can update the following members of uio_iov (the
       logical buffer segment descriptor vector): Specifies the address of the
       current	byte within the current logical buffer segment.	 Specifies the
       remaining size of the current segment.

RETURN VALUES
       Upon successfully moving the data,  the	uiomove	 routine  returns  the
       value  0	 (zero).  This	action	implies	 that  the  user virtual space
       described by the	 uio  structure	 is  accessible.   Otherwise,  uiomove
       returns the error value EFAULT, indicating an inability to fully access
       the user virtual space from within the context of the current  process.
       A  partial move may have occurred before the logical user buffer became
       inaccessible. The uio structure is  appropriately  updated  to  reflect
       such partial moves.

       The EFAULT return value is suitable for placement in the u_error member
       of the user structure. Following failure of a system call, this	member
       contains	 the error code automatically returned in errno to the current
       process.	 Kernel module writers should explicitly set this  value  when
       it  is returned and disallow the requested operation. This setting lets
       the current process determine the appropriate reason (``bad  address'')
       why its request could not be satisfied.

SEE ALSO
       Routines: copyin(9r), copyout(9r), fubyte(9r), subyte(9r)

       Data Structures: uio(9s)

								   uiomove(9r)
[top]

List of man pages available for DigitalUNIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net