pwrite(), pwrite64()
QNX SDP8.0C Library ReferenceAPIDeveloper
Write into a file without changing the file pointer
Synopsis:
#include <unistd.h>
ssize_t pwrite( int filedes,
                const void* buff,
                size_t nbytes,
                off_t offset );
ssize_t pwrite64( int filedes,
                  const void* buff,
                  size_t nbytes,
                  off64_t offset );
Arguments:
- filedes
 - The file descriptor for the file you want to write in.
 - buff
 - A pointer to a buffer that contains the data you want to write.
 - nbytes
 - The number of bytes that you want to write. This amount must not exceed SSIZE_MAX - sizeof(io_write_t) - sizeof(struct _xtype_offset) (see <limits.h>), or the function fails and sets errno to EOVERFLOW.
 - offset
 - The desired position inside the file.
 
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The pwrite() and pwrite64() functions perform the same action as write(), except that they write into a given position without changing the file pointer.
Note: 
The pwrite64() function is a large-file support version of
pwrite() provided for backwards compatibility.
If you're using large-file support functions and data types, you should define
_LARGEFILE64_SOURCE with a value of 1 to ensure they appear in the name space.
For more information, see 
Classificationin
What's in a Function Description?.
Returns:
The number of bytes actually written, or -1 if an error occurred (errno is set).
Errors:
- EAGAIN
 - The O_NONBLOCK flag is set for the file descriptor, and the process would be delayed in the write operation.
 - EBADF
 - The file descriptor, filedes, isn't a valid file descriptor open for writing.
 - EFBIG
 - One of the following occurred:
  
- An attempt was made to write a file that exceeds the maximum file size and there was no room for any bytes to be written.
 - The file is a regular file, nbytes is greater than 0, and the starting position is greater than or equal to the offset maximum established in the open file description associated with filedes.
 
 - EINTR
 - The write operation was interrupted by a signal, and either no data was transferred, or the resource manager responsible for that file doesn't report partial transfers.
 - EINVAL
 - The offset argument is invalid; the value is negative.
 - EIO
 - One of the following occurred:
  
- The process is a member of a background process group attempting to write to its controlling terminal, TOSTOP is set, the process is neither ignoring nor blocking SIGTTOU, and the process group of the process is orphaned.
 - A physical I/O error occurred (for example, a bad block on a disk). The precise meaning is device-dependent.
 
 - ENOBUFS
 - Insufficient resources were available in the system to perform the operation.
 - ENOSPC
 - There's no free space remaining on the device containing the file.
 - ENOSYS
 - The pwrite() function isn't implemented for the device specified by filedes.
 - ENXIO
 - One of the following occurred:
  
- A request was made of a nonexistent device, or the request was outside the capabilities of the device.
 - A hangup occurred on the STREAM being written to.
 
 - EOVERFLOW
 - An attempt was made to write an amount of data that when added to the sizes of the write message and extra type offset structures exceeds the allowable limit.
 - EPIPE
 - An attempt was made to write to a pipe (or FIFO) that isn't open for reading by any process. A SIGPIPE signal is also sent to the process.
 - ERANGE
 - The transfer request size was outside the range supported by the STREAMS file associated with filedes.
 - ESPIPE
 - The filedes argument is associated with a pipe, FIFO, or socket. The file pointer remains unchanged.
 
Classification:
pwrite() is POSIX 1003.1; pwrite64() is Large-file support
| Safety: | |
|---|---|
| Cancellation point | Yes | 
| Signal handler | Yes | 
| Thread | Yes | 
Page updated: 
