当前位置:嗨网首页>书籍在线阅读

16-Append(追加)模式

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.3.2 Append(追加)模式

当以Append模式(参数设置O_APPEND)打开文件描述符时,写操作不是从文件描述符的当前位置开始,而是从当前文件的末尾开始。

举个例子,假设有两个进程都想从文件的末尾开始写数据。这种场景很常见:比如很多进程共享的事件日志。刚开始,这两个进程的文件位置指针都正确地指向文件末尾。第一个进程开始写,如果不采用Append模式,一旦第二个进程也开始写,它就不是从“当前”文件末尾开始写,而是从“之前”文件末尾(刚开始指向的文件末尾,即第一个进程开始写数据之前)开始写。这意味着如果缺乏显式的同步机制,多个进程由于会发生竞争问题,不能同时向同一个文件追加写。

Append模式可以避免这个问题。它保证了文件位置指针总是指向文件末尾,因此即使存在多个写进程,所有的写操作还是能够保证是追加写。Append模式可以理解成在每次写请求之前的文件位置更新操作是个原子操作。更新文件位置,指向新写入的数据末尾。这和下一次write()调用无关,因为更新文件位置是自动完成的,但如果由于某些原因下一次执行的是read()调用,那会有些影响。

Append模式对于某些任务很有用,比如之前提到的日志文件更新,但对其他很多操作意义不大。