Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between read and pread in unix?

Tags:

c

unix

People also ask

Is Pread a system call?

HISTORY. The pread() and pwrite() system calls were added to Linux in version 2.1. 60; the entries in the i386 system call table were added in 2.1.

What is Pwrite?

The pwrite() function writes nbyte bytes from buf to the file associated with file_descriptor. The offset value defines the starting position in the file and the file pointer position is not changed.


Pread() works just like read() but reads from the specified position in the file without modifying the file pointer.

You would use it when you need to repeatedly read data at fixed offset, for example a database index that points to individual records in file, to save on seek() calls.

Basically use read() if your data is sequential or pread() if you know, or can calculate offset at which to read.


From this link,

The atomicity of pread enables processes or threads that share file descriptors to read from a shared file at a particular offset without using a locking mechanism that would be necessary to achieve the same result in separate lseek and read system calls. Atomicity is required as the file pointer is shared and one thread might move the pointer using lseek after another process completes an lseek but prior to the read.


Google gave me man pread.

If you read() twice, you get two different results, which shows that read() advances in the file.

If you pread() twice, you get the same result, which shows that pread() stays at the same point in the file.