![]() |
![]() |
![]() |
Read bytes from a file
#include <unistd.h> #include <sys/uio.h> ssize_t read( int fildes, void* buf, size_t nbyte );
libc
The read() function attempts to read nbyte bytes from the file associated with the open file descriptor, fildes, into the buffer pointed to by buf.
If nbyte is zero, read() returns zero, and has no other effect.
On a regular file or other file capable of seeking, read() starts at a position in the file given by the file offset associated with fildes. Before successfully returning from read(), the file offset is incremented by the number of bytes actually read.
![]() |
The read() call ignores advisory locks that may have been set by the fcntl() function. |
On a file not capable of seeking, read() starts at the current position.
When read() returns successfully, its return value is the number of bytes actually read and placed in the buffer. This number will never be greater than nbyte, although it may be less than nbyte for one of the following reasons:
If read() is interrupted by a signal before it reads any data, it returns a value of -1, and errno is set to EINTR. However, if read() is interrupted by a signal after it has successfully read some data, it will return the number of bytes read.
No data is transferred past the current end-of-file. If the starting position is at or after the end-of-file, read() returns zero. If the file is a device special file, the result of subsequent calls to read() will work, based on the then current state of the device (that is, the end of file is transitory).
If the value of nbyte is greater than INT_MAX, read() will return -1, and set errno to EINVAL. See <limits.h>.
When attempting to read from an empty pipe or FIFO:
When attempting to read from a file (other than a pipe or FIFO) that support nonblocking reads and has no data currently available:
If read() is called on a portion of a file, prior to the end-of-file, that has not been written, it will return bytes with the value zero.
If read() succeeds, the st_atime field of the file is marked for update.
The number of bytes actually read, or -1 (errno is set).
#include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> int main( void ) { int fd; int size_read; char buffer[80]; /* Open a file for input */ fd = open( "myfile.dat", O_RDONLY ); /* Read the text */ size_read = read( fd, buffer, sizeof( buffer ) ); /* Test for error */ if( size_read == -1 ) { perror( "Error reading myfile.dat" ); return EXIT_FAILURE; } /* Close the file */ close( fd ); return EXIT_SUCCESS; }
Safety: | |
---|---|
Cancellation point | Yes |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |
close(), creat(), dup(), dup2(), errno, fcntl(), lseek(), open(), pipe(), readblock(), readv(), select(), write(), writev()
![]() |
![]() |
![]() |