fopen 的mode
转自 http://blog.csdn.net/todd911/article/details/8976543
r 打开只读文件,该文件必须存在。
r+具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容。该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
关于a 和 a+ 网上有如下的说明:
"a"模式在添加数据前并不清除EOF标志. 添加数据后 用 MS-DOS 的 TYPE 命令只能显示数据到原来EOF 标志而并不会显示后来添加的.
"a+"模式会清除EOF标志, 添加数据后 用 MS-DOS 的 TYPE 命令能显示所有的数据. "a+" 模式需要以CTRL+Z EOF标志结束流输入.
但是我在linux下试验过,使用a和a+,写入的字符时一样的,没有EOF不一样的问题:
比如原来文件内容为abc,如果使用a模式添加了123,再读取该文件,遇到EOF就停止输出,最后显示abc123,如果按照上面的说法,应该只显示abc。
如果使用a+模式,最后显示也为abc123.
所以以上说法在linux下不成立,可能是在windows下的用法。
最后是在linux中man fopen中的说明:
a Open for appending (writing at end of file). The file is created if it does not exist. The
stream is positioned at the end of the file.
a+ Open for reading and appending (writing at end of file). The file is created if it does not
exist. The initial file position for reading is at the beginning of the file, but output is
always appended to the end of the file.
上面也没有提到EOF的问题。