• 主页
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux
JasonLeaster 学生  2014年02月05日
【疑问求助】lseek函数和pwrite函数《APUE》
pwrite是atomic operation的产物
操作1.对于单进程操作来先调用lseek 然后调用write
操作2.直接调用pwrite
APUE上说是等价的,只要操作1在调用lseek和write之间,不被打断,1,2就是等价的
原话:
Calling pread is equivalent to calling lseek followed by a call to read,with the
following exceptions.
•There is no way to interrupt the two operations that occur when we call pread.
•The current file offset is not updated.

Calling pwrite is equivalent to calling lseek followed by a call to write,with similar
exceptions.

In general, the term atomic operation refers to an operation that might be composed
of multiple steps. If the operation is performed atomically ,either all the steps are performed (on success) or none are performed (on failure).

APUE没有给出示例代码
我自己练习时候发现了问题
ssize_t pwrite(int fd ,const void *buf,size_tnbytes ,off_t offset);
这个是pwrite的原型
观察,最后一个参数,offset,这个变量怎么得到呢?除了lseek返回offset还能怎样
但是pwrite从逻辑上讲又是lseek+write
这个时候是没有offset参数来源的,必须在pwrite之前调用一个lseek得到当前offset,以此来作为pwrite的参数
但是问题来了,如果这样调用的话,那么pwrite就显得很没意义,因为都是lseek+write或则lseek+pwrite
pwrite反而显得多此一举了

渣渣愚昧,恳请大神明示
...全文
93 点赞 收藏 6
写回复
6 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Linux/Unix社区
创建于2007-08-27

7057

社区成员

7.3w+

社区内容

Linux/Unix社区 应用程序开发区
社区公告
暂无公告