#include <unistd.h> ssize_t pread(int file_descriptor, void *buf, size_t nbyte, off_t offset);Service Program Name: QP0LLIB1
From the file indicated by file_descriptor, the pread() function reads nbyte bytes of input into the memory area indicated by buf. The offset value defines the starting position in the file and the file pointer position is not changed.
See read()--Read from Descriptor for more information relating to reading from a descriptor.
In the QSYS.LIB and independent ASP QSYS.LIB file systems, the offset will be ignored for a member while in text mode.
No authorization is required.
value | pread() was successful. The value returned is the number of bytes actually read and placed in buf. This number is less than or equal to nbyte. It is less than nbyte only if pread() reached the end of the file before reading the requested number of bytes. If pread() is reading a regular file and encounters a part of the file that has not been written (but before the end of the file), pread() places bytes containing zeros into buf in place of the unwritten bytes. |
-1 | pread() was not successful. The errno global variable is set to indicate the error. If the value of nbyte is greater than SSIZE_MAX, pread() sets errno to [EINVAL]. |
If pread() is not successful, errno usually indicates one of the following errors. Under some conditions, errno could indicate an error other than those listed here.
Error condition | Additional information |
---|---|
[EACCES] |
If you are accessing a remote file through the Network File System, update operations to file permissions at the server are not reflected at the client until updates to data that is stored locally by the Network File System take place. (Several options on the Add Mounted File System (ADDMFS) command determine the time between refresh operations of local data.) Access to a remote file may also fail due to different mappings of user IDs (UID) or group IDs (GID) on the local and remote systems. |
[EAGAIN] | |
[EBADF] | |
[EBADFID] | |
[EBUSY] | |
[EDAMAGE] | |
[EFAULT] | |
[EINTR] | |
[EINVAL] |
The file resides in a file system that does not support large files, and the starting offset of the file exceeds 2GB minus 2 bytes. This will also occur if the offset value is less than 0. |
[EIO] | |
[ENOMEM] | |
[ENOTAVAIL] | |
[ENOTSAFE] | |
[ENXIO] | |
[EOVERFLOW] |
The file is a regular file, nbyte is greater than 0, the starting offset is before the end-of-file, and the starting offset is greater than or equal to 2GB minus 2 bytes. |
[ERESTART] | |
[ESPIPE] | |
[ESTALE] |
If you are accessing a remote file through the Network File System, the file may have been deleted at the server. |
[EUNKNOWN] |
If interaction with a file server is required to access the object, errno could also indicate one of the following errors:
Error condition | Additional information |
---|---|
[EADDRNOTAVAIL] | |
[ECONNABORTED] | |
[ECONNREFUSED] | |
[ECONNRESET] | |
[EHOSTDOWN] | |
[EHOSTUNREACH] | |
[ENETDOWN] | |
[ENETRESET] | |
[ENETUNREACH] | |
[ESTALE] |
If you are accessing a remote file through the Network File System, the file may have been deleted at the server. |
[ETIMEDOUT] | |
[EUNATCH] |
The following messages may be sent from this function:
Message ID | Error Message Text |
---|---|
CPE3418 E | Possible APAR condition or hardware failure. |
CPF3CF2 E | Error(s) occurred during running of &1 API. |
CPF9872 E | Program or service program &1 in library &2 ended. Reason code &3. |
CPFA081 E | Unable to set return value or error code. |
CPFA0D4 E | File system error occurred. Error number &1. |
This function will fail with error code [ENOTSAFE] if the object specified is a save file and multiple threads exist in the job.
This function will fail with error code [EIO] if the file specified is a save file and the file does not contain complete save file data.
The file access time for a database member is updated using the normal rules that apply to database files. At most, the access time is updated once per day.
If you previously used the integrated file system interface to manipulate a member that contains an end-of-file character, you should avoid using other interfaces (such as the Source Entry Utility or database reads and writes) to manipulate the member. If you use other interfaces after using the integrated file system interface, the end-of-file information will be lost.
The file access time is not updated on a pread() operation.
When reading from files on volumes formatted in Universal Disk Format (UDF), byte locks on the range being read are ignored.
Local access to remote files through the Network File System may produce unexpected results due to conditions at the server. Once a file is open, subsequent requests to perform operations on the file can fail because file attributes are checked at the server on each request. If permissions on the file are made more restrictive at the server or the file is unlinked or made unavailable by the server for another client, your operation on an open file descriptor will fail when the local Network File System receives these updates. The local Network File System also impacts operations that retrieve file attributes. Recent changes at the server may not be available at your client yet, and old values may be returned from operations. (Several options on the Add Mounted File System (ADDMFS) command determine the time between refresh operations of local data.)
Reading and writing to files with the Network File System relies on byte-range locking to guarantee data integrity. To prevent data inconsistency, use the fcntl() API to get and release these locks.
The largest buffer size allowed is 16 megabytes. If a larger buffer is passed, the error EINVAL will be received.
See Code disclaimer information for information pertaining to code examples.
The following example opens a file and reads input:
#include <stdio.h> #include <unistd.h> #include <fcntl.h> main() { int ret, file_descriptor; off_t off=5; char buf[]="Test text"; if ((file_descriptor = creat("test.output", S_IWUSR))!= 0) perror("creat() error"); else { if (-1==(rc=write(file_descriptor, buf, sizof(buf)-1))) perror("write() error"); if (close(file_descriptor)!= 0) perror("close() error"); } if ((file_descriptor = open("test.output", O_RDONLY)) < 0) perror("open() error"); else { ret = pread(file_descriptor, buf, ((sizeof(buf)-1)-off), off); buf[ret] = 0x00; printf("block pread: \n<%s>\n", buf); if (close(file_descriptor)!= 0) perror("close() error"); } if (unlink("test.output")!= 0) perror("unlink() error"); }
Output:
block pread: <text>
Top | UNIX-Type APIs | APIs by category |