Previous | Table of Contents | Next

Page 888

CONFORMS TO

POSIX.1

SEE ALSO

signal(2), wait4(2), signal(7)

Linux, 24 July 1993

wait3, wait4

wait3, wait4—Wait for process termination, BSD style

SYPNOSIS

#define _USE_BSD
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/wait.h>
pid_t wait3(int *status,int options,
struct rusage *rusage);
pid_t wait4(pid_t pid,int*status,int options,
struct rusage *rusage);

DESCRIPTION

The wait3 function suspends execution of the current process until a child has exited, or until a signal is delivered whose action is to terminate the current process or to call a signal-handling function. If a child has already exited by the time of the call (a zombie process), the function returns immediately. Any system resources used by the child are freed.

The wait4 function suspends execution of the current process until a child as specified by the pid argument has exited, or until a signal is delivered whose action is to terminate the current process or to call a signal-handling function. If a child as requested by pid has already exited by the time of the call (a zombie process), the function returns immediately. Any system resources used by the child are freed.

The value of pid can be one of the following:

< _1 Wait for any child process whose process group ID is equal to the absolute value of pid.
_1 Wait for any child process; this is equivalent to calling wait3.
0 Wait for any child process whose process group ID is equal to that of the calling process.
> 0 Wait for the child whose process ID is equal to the value of pid.

The value of options is an exclusive OR of zero or more of the following constants:
WNOHANG Return immediately if no child is there to be waited for.
WUNTRACED Also return for children that are stopped and whose status has not been reported.

If status is not NULL, wait3 and wait4 store status information in the location pointed to by statloc.

This status can be evaluated with the following macros:
WIFEXITED(*status) Isnonzero if the child exited normally.
WEXITSTATUS(*status) Evaluates to the least significant eight bits of the return code of the child that terminated, which may have been set as the argument to a call to exit or as the argument for a return statement in the main program. This macro can only be evaluated if WIFEXITED returned nonzero.
WIFSIGNALED(*status) Returns true if the child process exited because of a signal that was not caught.
WTERMSIG(*status) Returns the number of the signal that caused the child process to terminate. This macro can only be evaluated if WIFSIGNALED returned nonzero.

Page 889

WIFSTOPPED(*status) Returns true if the child process that caused the return is currently stopped; this is only possible if the call was done using WUNTRACED.
WSTOPSIG(*status) Returns the number of the signal that caused the child to stop. This macro can only be evaluated if WIFSTOPPED returned nonzero. If rusage is not NULL, the struct rusage as defined in <sys/resource.h> it points to will be filled with accounting information. See getrusage(2) for details.

RETURN VALUE

These calls return the process ID of the child that exited, _1 on error, or 0 if WNOHANG was used and no child was available (in which case errno will be set appropriately).

ERRORS

ECHILD If the child process specified in pid does not exist.
EPERM If the effective user ID of the calling process does not match that of the process being waited for, and the effective user ID of the calling process is not that of the superuser.
ERESTARTSYS If WNOHANG was not set and an unblocked signal or a SIGCHLD was caught; this is an extension to the POSIX.1 standard.

CONFORMS TO

POSIX.1

SEE ALSO

signal(2), getrusage(2), wait(2), signal(7)

Linux, 24 July 1993

write

write—Writes to a file descriptor

SYPNOSIS

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

DESCRIPTION

write writes up to count bytes to the file referenced by the file descriptor fd from the buffer starting at buf. POSIX requires that a read() that can be proved to occur after a write() returned returns the new data. Note that not all filesystems are POSIX conforming.

RETURN VALUE

On success, the number of bytes written is returned (0 indicates nothing was written). On error, _1 is returned, and errno is set appropriately. If count is 0 and the file descriptor refers to a regular file, 0 will be returned without causing any other effect. For a special file, the results are not portable.

ERRORS

EBADF fd is not a valid file descriptor or is not open for writing.
EINVAL fd is attached to an object that is unsuitable for writing.
EFAULT buf is outside your accessible address space.

Page 890

EPIPE fd is connected to a pipe or socket whose reading end is closed. When this happens, the writing process will receive a SIGPIPE signal; if it catches, blocks, or ignores this, the error EPIPE is returned.
EAGAIN Non-blocking I/O has been selected using O_NONBLOCK, and there was no room in the pipe or socket connected to fd to write the data immediately.
EINTR The call was interrupted by a signal before any data was written.
ENOSPC The device containing the file referred to by fd has no room for the data.

Other errors may occur, depending on the object connected to fd.

CONFORMS TO

SVID, AT&T, POSIX, X/OPEN, BSD 4.3

SEE ALSO

open(2), read(2), fcntl(2), close(2), lseek(2), select(2), ioctl(2), fsync(2), fwrite(3)

Linux, 13 January 1996

Previous | Table of Contents | Next

1