tags:

views:

229

answers:

4

What is the difference between the functions read() and pread() in unix?
When choosing between them, what points should I take into consideration?

I googled for the difference between them but without results.

+2  A: 

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.

ihuk
A: 

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.

Amit
A: 

read() starts reading the requested number of bytes from the current file offset whereas with pread(), you can specify the offset. This is useful in situations where one set of functions is reading through a file sequentially using the file pointer while another set is accessing specific data at the same time.

Timo Geusch
+2  A: 

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.

mouviciel