diff options
Diffstat (limited to 'doc/posix_users/io.t')
-rw-r--r-- | doc/posix_users/io.t | 1144 |
1 files changed, 1144 insertions, 0 deletions
diff --git a/doc/posix_users/io.t b/doc/posix_users/io.t new file mode 100644 index 0000000000..570772c543 --- /dev/null +++ b/doc/posix_users/io.t @@ -0,0 +1,1144 @@ +@c +@c COPYRIGHT (c) 1988-2002. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Input and Output Primitives Manager + +@section Introduction + +The input and output primitives manager is ... + +The directives provided by the input and output primitives manager are: + +@itemize @bullet +@item @code{pipe} - Create an Inter-Process Channel +@item @code{dup} - Duplicates an open file descriptor +@item @code{dup2} - Duplicates an open file descriptor +@item @code{close} - Closes a file +@item @code{read} - Reads from a file +@item @code{write} - Writes to a file +@item @code{fcntl} - Manipulates an open file descriptor +@item @code{lseek} - Reposition read/write file offset +@item @code{fsync} - Synchronize file complete in-core state with that on disk +@item @code{fdatasync} - Synchronize file in-core data with that on disk +@item @code{sync} - Schedule file system updates +@item @code{mount} - Mount a file system +@item @code{unmount} - Unmount file systems +@item @code{aio_read} - Asynchronous Read +@item @code{aio_write} - Asynchronous Write +@item @code{lio_listio} - List Directed I/O +@item @code{aio_error} - Retrieve Error Status of Asynchronous I/O Operation +@item @code{aio_return} - Retrieve Return Status Asynchronous I/O Operation +@item @code{aio_cancel} - Cancel Asynchronous I/O Request +@item @code{aio_suspend} - Wait for Asynchronous I/O Request +@item @code{aio_fsync} - Asynchronous File Synchronization +@end itemize + +@section Background + +There is currently no text in this section. + +@section Operations + +There is currently no text in this section. + +@section Directives + +This section details the input and output primitives manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@c +@c +@c +@page +@subsection pipe - Create an Inter-Process Channel + +@findex pipe +@cindex create an inter + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int pipe( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. + +@c +@c +@c +@page +@subsection dup - Duplicates an open file descriptor + +@findex dup +@cindex duplicates an open file descriptor + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <unistd.h> + +int dup( + int fildes +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item EBADF +Invalid file descriptor. + +@item EINTR +Function was interrupted by a signal. + +@item EMFILE +The process already has the maximum number of file descriptors open +and tried to open a new one. +@end table + +@subheading DESCRIPTION: + +The @code{dup} function returns the lowest numbered available file +descriptor. This new desciptor refers to the same open file as the +original descriptor and shares any locks. + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection dup2 - Duplicates an open file descriptor + +@findex dup2 +@cindex duplicates an open file descriptor + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <unistd.h> + +int dup2( + int fildes, + int fildes2 +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item EBADF +Invalid file descriptor. + +@item EINTR +Function was interrupted by a signal. + +@item EMFILE +The process already has the maximum number of file descriptors open +and tried to open a new one. +@end table + +@subheading DESCRIPTION: + +@code{Dup2} creates a copy of the file descriptor @code{oldfd}. + +The old and new descriptors may be used interchangeably. They share locks, file +position pointers and flags; for example, if the file position is modified by using +@code{lseek} on one of the descriptors, the position is also changed for the other. + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection close - Closes a file. + +@findex close +@cindex closes a file. + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <unistd.h> + +int close( + int fildes +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item EBADF +Invalid file descriptor + +@item EINTR +Function was interrupted by a signal. +@end table + +@subheading DESCRIPTION: + +The @code{close()} function deallocates the file descriptor named by +@code{fildes} and makes it available for reuse. All outstanding +record locks owned by this process for the file are unlocked. + +@subheading NOTES: + +A signal can interrupt the @code{close()} function. In that case, +@code{close()} returns -1 with @code{errno} set to EINTR. The file +may or may not be closed. + +@c +@c +@c +@page +@subsection read - Reads from a file. + +@findex read +@cindex reads from a file. + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <unistd.h> + +int read( + int fildes, + void *buf, + unsigned int nbyte +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets @code{errno} to one of +the following: + +@table @b +@item EAGAIN +The O_NONBLOCK flag is set for a file descriptor and the process +would be delayed in the I/O operation. + +@item EBADF +Invalid file descriptor + +@item EINTR +Function was interrupted by a signal. + +@item EIO +Input or output error + +@end table + +@subheading DESCRIPTION: + +The @code{read()} function reads @code{nbyte} bytes from the file +associated with @code{fildes} into the buffer pointed to by @code{buf}. + +The @code{read()} function returns the number of bytes actually read +and placed in the buffer. This will be less than @code{nbyte} if: + +@itemize @bullet + +@item The number of bytes left in the file is less than @code{nbyte}. + +@item The @code{read()} request was interrupted by a signal. + +@item The file is a pipe or FIFO or special file with less than @code{nbytes} +immediately available for reading. + +@end itemize + +When attempting to read from any empty pipe or FIFO: + + +@itemize @bullet + +@item If no process has the pipe open for writing, zero is returned to +indicate end-of-file. + +@item If some process has the pipe open for writing and O_NONBLOCK is set, +-1 is returned and @code{errno} is set to EAGAIN. + +@item If some process has the pipe open for writing and O_NONBLOCK is clear, +@code{read()} waits for some data to be written or the pipe to be closed. + +@end itemize + + +When attempting to read from a file other than a pipe or FIFO and no data +is available. + +@itemize @bullet + +@item If O_NONBLOCK is set, -1 is returned and @code{errno} is set to EAGAIN. + +@item If O_NONBLOCK is clear, @code{read()} waits for some data to become +available. + +@item The O_NONBLOCK flag is ignored if data is available. + +@end itemize + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection write - Writes to a file + +@findex write +@cindex writes to a file + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <unistd.h> + +int write( + int fildes, + const void *buf, + unsigned int nbytes +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item EAGAIN +The O_NONBLOCK flag is set for a file descriptor and the process +would be delayed in the I/O operation. + +@item EBADF +Invalid file descriptor + +@item EFBIG +An attempt was made to write to a file that exceeds the maximum file +size + +@item EINTR +The function was interrupted by a signal. + +@item EIO +Input or output error. + +@item ENOSPC +No space left on disk. + +@item EPIPE +Attempt to write to a pope or FIFO with no reader. + +@end table + +@subheading DESCRIPTION: + +The @code{write()} function writes @code{nbyte} from the array pointed +to by @code{buf} into the file associated with @code{fildes}. + +If @code{nybte} is zero and the file is a regular file, the @code{write()} +function returns zero and has no other effect. If @code{nbyte} is zero +and the file is a special file, te results are not portable. + +The @code{write()} function returns the number of bytes written. This +number will be less than @code{nbytes} if there is an error. It will never +be greater than @code{nbytes}. + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection fcntl - Manipulates an open file descriptor + +@findex fcntl +@cindex manipulates an open file descriptor + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <sys/types.h> +#include <fcntl.h> +#include <unistd.h> + +int fcntl( + int fildes, + int cmd +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item EACCESS +Search permission is denied for a direcotry in a file's path +prefix. + +@item EAGAIN +The O_NONBLOCK flag is set for a file descriptor and the process +would be delayed in the I/O operation. + +@item EBADF +Invalid file descriptor + +@item EDEADLK +An @code{fcntl} with function F_SETLKW would cause a deadlock. + +@item EINTR +The functioin was interrupted by a signal. + +@item EINVAL +Invalid argument + +@item EMFILE +Too many file descriptor or in use by the process. + +@item ENOLCK +No locks available + +@end table + +@subheading DESCRIPTION: + +@code{fcntl()} performs one of various miscellaneous operations on +@code{fd}. The operation in question is determined by @code{cmd}: + +@table @b + +@item F_DUPFD +Makes @code{arg} be a copy of @code{fd}, closing @code{fd} first if necessary. + +The same functionality can be more easily achieved by using @code{dup2()}. + +The old and new descriptors may be used interchangeably. They share locks, +file position pointers and flags; for example, if the file position is +modified by using @code{lseek()} on one of the descriptors, the position is +also changed for the other. + +The two descriptors do not share the close-on-exec flag, however. The +close-on-exec flag of the copy is off, meaning that it will be closed on +exec. + +On success, the new descriptor is returned. + +@item F_GETFD +Read the close-on-exec flag. If the low-order bit is 0, the file will +remain open across exec, otherwise it will be closed. + +@item F_SETFD +Set the close-on-exec flag to the value specified by @code{arg} (only the least +significant bit is used). + +@item F_GETFL +Read the descriptor's flags (all flags (as set by open()) are returned). + +@item F_SETFL +Set the descriptor's flags to the value specified by @code{arg}. Only +@code{O_APPEND} and @code{O_NONBLOCK} may be set. + +The flags are shared between copies (made with @code{dup()} etc.) of the same +file descriptor. + +The flags and their semantics are described in @code{open()}. + +@item F_GETLK, F_SETLK and F_SETLKW +Manage discretionary file locks. The third argument @code{arg} is a pointer to a +struct flock (that may be overwritten by this call). + +@item F_GETLK +Return the flock structure that prevents us from obtaining the lock, or set the +@code{l_type} field of the lock to @code{F_UNLCK} if there is no obstruction. + +@item F_SETLK +The lock is set (when @code{l_type} is @code{F_RDLCK} or @code{F_WRLCK}) or +cleared (when it is @code{F_UNLCK}. If lock is held by someone else, this +call returns -1 and sets @code{errno} to EACCES or EAGAIN. + +@item F_SETLKW +Like @code{F_SETLK}, but instead of returning an error we wait for the lock to +be released. + +@item F_GETOWN +Get the process ID (or process group) of the owner of a socket. + +Process groups are returned as negative values. + +@item F_SETOWN +Set the process or process group that owns a socket. + +For these commands, ownership means receiving @code{SIGIO} or @code{SIGURG} +signals. + +Process groups are specified using negative values. + +@end table + +@subheading NOTES: + +The errors returned by @code{dup2} are different from those returned by +@code{F_DUPFD}. + +@c +@c +@c +@page +@subsection lseek - Reposition read/write file offset + +@findex lseek +@cindex reposition read/write file offset + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <sys/types.h> +#include <unistd.h> + +int lseek( + int fildes, + off_t offset, + int whence +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item EBADF +@code{Fildes} is not an open file descriptor. + +@item ESPIPE +@code{Fildes} is associated with a pipe, socket or FIFO. + +@item EINVAL +@code{Whence} is not a proper value. + +@end table + +@subheading DESCRIPTION: + +The @code{lseek} function repositions the offset of the file descriptor +@code{fildes} to the argument offset according to the directive whence. +The argument @code{fildes} must be an open file descriptor. @code{Lseek} +repositions the file pointer fildes as follows: + +@itemize @bullet + +@item +If @code{whence} is SEEK_SET, the offset is set to @code{offset} bytes. + +@item +If @code{whence} is SEEK_CUR, the offset is set to its current location +plus offset bytes. + +@item +If @code{whence} is SEEK_END, the offset is set to the size of the +file plus @code{offset} bytes. + +@end itemize + +The @code{lseek} function allows the file offset to be set beyond the end +of the existing end-of-file of the file. If data is later written at this +point, subsequent reads of the data in the gap return bytes of zeros +(until data is actually written into the gap). + +Some devices are incapable of seeking. The value of the pointer associated +with such a device is undefined. + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection fsync - Synchronize file complete in-core state with that on disk + +@findex fsync +@cindex synchronize file complete in + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int fsync( + int fd +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +On success, zero is returned. On error, -1 is returned, and @code{errno} +is set appropriately. + +@table @b +@item EBADF +@code{fd} is not a valid descriptor open for writing + +@item EINVAL +@code{fd} is bound to a special file which does not support support synchronization + +@item EROFS +@code{fd} is bound to a special file which does not support support synchronization + +@item EIO +An error occurred during synchronization + +@end table + +@subheading DESCRIPTION: + +@code{fsync} copies all in-core parts of a file to disk. + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection fdatasync - Synchronize file in-core data with that on disk. + +@findex fdatasync +@cindex synchronize file in + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int fdatasync( + int fd +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +On success, zero is returned. On error, -1 is returned, and @code{errno} is +set appropriately. + +@table @b +@item EBADF +@code{fd} is not a valid file descriptor open for writing. + +@item EINVAL +@code{fd} is bound to a special file which does not support synchronization. + +@item EIO +An error occurred during synchronization. + +@item EROFS +@code{fd} is bound to a special file which dows not support synchronization. + +@end table + +@subheading DESCRIPTION: + +@code{fdatasync} flushes all data buffers of a file to disk (before the system call +returns). It resembles @code{fsync} but is not required to update the metadata such +as access time. + +Applications that access databases or log files often write a tiny data fragment +(e.g., one line in a log file) and then call @code{fsync} immediately in order to +ensure that the written data is physically stored on the harddisk. Unfortunately, +fsync will always initiate two write operations: one for the newly written data and +another one in order to update the modification time stored in the inode. If the +modification time is not a part of the transaction concept @code{fdatasync} can be +used to avoid unnecessary inode disk write operations. + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection sync - Schedule file system updates + +@findex sync +@cindex synchronize file systems + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +void sync(void); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +The @code{sync} service causes all information in memory that updates +file systems to be scheduled for writing out to all file systems. + + +@subheading NOTES: + +The writing of data to the file systems is only guaranteed to be +scheduled upon return. It is not necessarily complete upon return +from @code{sync}. + +@c +@c +@c +@page +@subsection mount - Mount a file system + +@findex mount +@cindex mount a file system + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <libio.h> + +int mount( + rtems_filesystem_mount_table_entry_t **mt_entry, + rtems_filesystem_operations_table *fs_ops, + rtems_filesystem_options_t fsoptions, + char *device, + char *mount_point +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item EXXX + +@end table + +@subheading DESCRIPTION: + +The @code{mount} routines mounts the filesystem class +which uses the filesystem operations specified by @code{fs_ops} +and @code{fsoptions}. The filesystem is mounted at the directory +@code{mount_point} and the mode of the mounted filesystem is +specified by @code{fsoptions}. If this filesystem class requires +a device, then the name of the device must be specified by @code{device}. + +If this operation succeeds, the mount table entry for the mounted +filesystem is returned in @code{mt_entry}. + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection unmount - Unmount file systems + +@findex unmount +@cindex unmount file systems + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +#include <libio.h> + +int unmount( + const char *mount_path +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item EXXX +@end table + +@subheading DESCRIPTION: + +The @code{unmount} routine removes the attachment of the filesystem specified +by @code{mount_path}. + +@subheading NOTES: + +NONE + +@c +@c +@c +@page +@subsection aio_read - Asynchronous Read + +@findex aio_read +@cindex asynchronous read + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int aio_read( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. + +@c +@c +@c +@page +@subsection aio_write - Asynchronous Write + +@findex aio_write +@cindex asynchronous write + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int aio_write( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. + +@c +@c +@c +@page +@subsection lio_listio - List Directed I/O + +@findex lio_listio +@cindex list directed i/o + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int lio_listio( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. + +@c +@c +@c +@page +@subsection aio_error - Retrieve Error Status of Asynchronous I/O Operation + +@findex aio_error +@cindex retrieve error status of asynchronous i/o operation + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int aio_error( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. + +@c +@c +@c +@page +@subsection aio_return - Retrieve Return Status Asynchronous I/O Operation + +@findex aio_return +@cindex retrieve return status asynchronous i/o operation + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int aio_return( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. + +@c +@c +@c +@page +@subsection aio_cancel - Cancel Asynchronous I/O Request + +@findex aio_cancel +@cindex cancel asynchronous i/o request + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int aio_cancel( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. + +@c +@c +@c +@page +@subsection aio_suspend - Wait for Asynchronous I/O Request + +@findex aio_suspend +@cindex wait for asynchronous i/o request + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int aio_suspend( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. + +@c +@c +@c +@page +@subsection aio_fsync - Asynchronous File Synchronization + +@findex aio_fsync +@cindex asynchronous file synchronization + +@subheading CALLING SEQUENCE: + +@ifset is-C +@example +int aio_fsync( +); +@end example +@end ifset + +@ifset is-Ada +@end ifset + +@subheading STATUS CODES: + +@table @b +@item E +The + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine is not currently supported by RTEMS but could be +in a future version. |