3.11 文件I/O_原子操作

来源:互联网 发布:淘宝详情怎么做的 编辑:程序博客网 时间:2024/05/19 20:59

1. 添写至一个文件

    任何一个需要多个函数调用的操作都不可能是原子操作,因为在两个函数调用之间,内核有可能会临时挂起该进程。

    UNIX系统提供了一种方法使这种操作成为原子操作,该方法是在打开文件时设置O_APPEND标志。这就使内核每次对这种文件进行写之前,都将进程的当前偏移量设置到该文件的尾端处,于是在每次写之前就不再需要调用lseek。

 

2. pread和pwrite函数

    Single UNIX Specification包括了XSI扩展,该扩展允许原子性地定位搜索(seek)和执行I/O。pread和pwrite就是这种扩展。

  • #include <unistd.h>
  • ssize_t pread(int filedes, void *buf, size_t nbytes, off_t offset);

返回值:读到的字节数,若已到文件结尾则返回0,若出错则返回-1

  • ssize_t pwrite(int filedes, const void *buf, size_t nbytes, off_t offset);

返回值:成功返回已写的字节数,出错返回-1

    调用pread相当于顺序调用lseek和read,但是pread又与这种顺序调用有下列重要区别:

  • 调用pread时,无法中断其定位和读操作。
  • 不更新文件指针。

 

3. 创建一个文件

    参看open函数的O_CREAT和O_EXCL选项的说明。

原创粉丝点击