fopen 函数中的 a 和 a+ 选项有啥区别?
Posted
技术标签:
【中文标题】fopen 函数中的 a 和 a+ 选项有啥区别?【英文标题】:What is the difference between a and a+ option in fopen function?fopen 函数中的 a 和 a+ 选项有什么区别? 【发布时间】:2013-11-09 09:24:34 【问题描述】:我无法理解 C fopen api 文档中对“a”和“a+”选项的描述。 “a+”中的选项是追加和更新。这里的update这个词是什么意思?
【问题讨论】:
【参考方案1】:这是手册页 (man fopen
) 所说的:
一个
打开以追加(在文件末尾写入)。如果文件被创建 不存在。流位于文件的末尾。
一个+
打开以进行读取和附加(在文件末尾写入)。该文件是 如果不存在则创建。读取的初始文件位置是 在文件的开头,但输出总是附加到末尾 文件。
这意味着:
a+: 指针最初位于文件的开头(用于读取),但当尝试写入操作时,它会移动到文件的末尾。
【讨论】:
不要对此感到自满——并非所有手册页都是相同的。我的说:a Open for writing. The file is created if it does not exist. The stream is positioned at the end of the file. Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar.
和 a+ Open for reading and writing. The file is created if it does not exist. The stream is positioned at the end of the file. Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar.
快速测试表明,对非空文件的第一次读取(在任何写入之前)会返回 EOF。所以在这种情况下,它从最后读取。这是在 Mac OS X 上。
在a+
的标准C 中,读取指针是从开头还是结尾开始由实现定义。手册页给出了某些特定系统的行为。此外,在标准 C 中,您必须始终在阅读和写作之间寻找【参考方案2】:
是的,有一个重要的区别:
a:在文件中追加数据,可以更新文件最后写入一些数据;
a+ :在文件中追加数据并更新它,这意味着它可以在最后写入,也可以读取文件。
在只写日志的实际情况下,两者都适合,但如果您还需要读取文件中的某些内容(使用附加模式下已打开的文件),则需要使用“a+”。
【讨论】:
以上是关于fopen 函数中的 a 和 a+ 选项有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
联合查询的select选项和单表查询的select选项有啥区别?
Python中的“a is b”和“id(a) == id(b)”有啥区别?