两个各自独立的进程各自打开同一个文件,则每个进程都有各自的文件表项。这是因为每个进程都有它自己对该文件的当前偏移量。
但是对一个给定的文件只有一个v节点表项。
lseek()只修改文件表项中的当前文件偏移量,没有进行任何IO操作。
可能有多个文件描述符指向同一个文件表项,比如fork()出的父子进程。
两个原子读写文件的操作:
<pre lang="c" escaped="true">
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
</pre>