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选项的说明。
- 3.11 文件I/O_原子操作
- 3.1 文件I/O_引言
- 3.17 文件I/O_小结
- 3.18 文件I/O_习题
- 3.2 文件I/O_文件描述符
- 3.10 文件I/O_文件共享
- 3.16 文件I/O_/dev/fd
- 关于文件I/o的原子操作
- i++不是原子操作
- i++ 不是原子操作
- 由unix文件I/O引出的原子操作
- i++是原子操作吗
- i++是否是原子操作?
- 文件原子操作
- 文件的原子操作
- i++和++i是否为原子操作
- i++是原子操作吗?怎么保证其原子性
- Java i++是原子操作的假象
- 汪国真《热爱生命》
- C3P0连接池详细配置
- 桥接模式
- WINCE嵌入式系统学习规划--转载
- 总结AXIIS使用(一)------HClusterStackExample.mxml
- 3.11 文件I/O_原子操作
- JRuby1.5.1下运行Rails2.2.2应用
- DataGridView导出到Excel的三个方法
- PLSQL Developer的一些技巧
- QSqlDatabase 使用小结,解决部分数据库操作导致程序崩溃的办法
- 知名网游Server端架构分析
- xdoclet生成hibernate映射文件
- 什么是WBS?
- div 做滚动条