Lipika Deka
Lipika Deka

Reputation: 3884

Threads and file descriptors

Do different threads within a single process have distinct independent file descriptor tables? If multiple threads within the same process concurrently access a single file, will the offset into the file for two different calls to open performed by different threads be thread-specific?

Upvotes: 25

Views: 30763

Answers (4)

Aravindh
Aravindh

Reputation: 555

Try pread()/pwrite().

You can still share the same filedescriptor among multiple threads,i.e, parallel reads/writes to the same file is guaranteed to be atomic using pread()/pwrite() as you will need to specify offset and number of bytes to read/write respectively.

Upvotes: 1

ninjalj
ninjalj

Reputation: 43688

In Linux, you can unshare() the file descriptor table via the CLONE_FILES flag, but I would advise against it.

Upvotes: 0

cnicutar
cnicutar

Reputation: 182639

The file descriptors are shared between the threads. If you want "thread specific" offsets, why not have each thread use a different file descriptor (open(2) multiple times) ?

Upvotes: 14

janneb
janneb

Reputation: 37208

No, there is only one file descriptor table per process, and it's shared among all the threads.

From your problem description, you might want to look into the pread() and pwrite() functions.

Upvotes: 23

Related Questions