我想:如果它不存在,要创建Ç的fopen模式读+写+创建
- 文件,
not overwritten if it does
。- 读写和
fseek
过的位置我想
,我无法找到有效的方式 - “W +”, “RW”, “名胜世界+”, “R + B”, “W + B” “a +”还是什么?
性能良好的基本水平 'open
' 是:
int fd =open("fname", O_RDWR | O_CREAT, 0666);
,但我想知道fopen alternative
。 我试过的每个模式字母[w,r,a,+]组合都会覆盖内容,或者fseek-fwrite不会写入它应该在的位置。无论设置什么fseek
...“r + +”都可以正常工作,但不会创建不存在的文件等,“a +”将始终追加。
更新:澄清为何例如 “A +” 是不是一个解决方案:
#include <stdio.h>
int main()
{ FILE *fp =fopen("aaa.txt", "a+");
fwrite("aaaaaaaaaaaaaaaaaaa", 1, 10, fp);
fseek(fp, 5, SEEK_SET);
fwrite("AAA", 1, 3, fp);
fclose(fp);
return 0;
}
runned with: $ rm aaa.txt; gcc test.c && ./a.out && cat aaa.txt && echo .
produces wrong result: aaaaaaaaaaAAA.
result should be: aaaaaAAAaa
UPDATE2:总结......我最终用最少的功能:
FILE *fopenrwc(char*n) {FILE*f=fopen(n,"a");if(f)fclose(f),f=fopen(n,"r+");return f;}
or:
FILE *fopenrwc(char*n) {return fdopen(open(n,O_RDWR|O_CREAT,0666),"r+");}
为什么'a +'不适合你? –
请说明为什么“a +”不起作用。 – Leandros
@SouravGhosh“a +”是我的第一选择,但在包含内容的文件中,fseek(0),write(buf)...追加到文件末尾而不是开始。它没有附加fseek和ftell所说的话。 – MetNP