pwrite(), pwrite64()

Write into a file without changing the file pointer


#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 );


The file descriptor for the file you want to write in.
A pointer to a buffer that contains the data you want to write.
The number of bytes to write.
The desired position inside the file.



Use the -l c option to qcc to link against this library. This library is usually included automatically.


The pwrite() and pwrite64() functions perform the same action as write(), except that they write into a given position without changing the file pointer. The pwrite64() function is a large-file support version of pwrite().

Note: In QNX Neutrino 6.6 or later, the large-file support functions and data types appear in the name space only if you define _LARGEFILE64_SOURCE when you compile your code. For more information, see "Classification" in What's in a Function Description?


The number of bytes actually written, or -1 if an error occurred (errno is set).


The O_NONBLOCK flag is set for the file descriptor, and the process would be delayed in the write operation.
The file descriptor, fildes, isn't a valid file descriptor open for writing.
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 fildes.
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.
The offset argument is invalid; the value is negative. The file pointer remains unchanged.
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.
Insufficient resources were available in the system to perform the operation.
There's no free space remaining on the device containing the file.
The pwrite() function isn't implemented for the filesystem specified by filedes.
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.
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.
The transfer request size was outside the range supported by the STREAMS file associated with fildes.
The fildes is associated with a pipe or FIFO. The file pointer remains unchanged.


pwrite() is POSIX 1003.1; pwrite64() is Large-file support

Cancellation point Yes
Interrupt handler No
Signal handler Yes
Thread Yes