を作成+読んで私がしたい:それが存在しない場合は作成するCのfopenのモードでは、書き込み+は
- ファイル、
not overwritten if it does
を。 " "W +"、 "RW" "RWB +" "R + B"" W + B - 読み取りと書き込みとfseek
私は
をしたい今までどこで、私は、有効なモードを見つけることができないために
int fd =open("fname", O_RDWR | O_CREAT, 0666);
が、私はfopen alternative
知りたい:
も行い、基本的なレベルの 'open
は' です。 私が試したすべてのモード文字[w、r、a、+]の組み合わせは、内容を上書きするか、fseek-fwriteがどこに書き込むべきかを書き留めません。 "a +"は常にfseek
が何を設定しても追加されます... "rw +"は正常に動作しますが、存在しないファイルを作成しません。
更新:なぜ、たとえば明確にするために、 "+" は解決策ではありません:
#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
アップデート2:私はで終わる要約...最低限の機能:
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