Windowsで、書き込みと読み取りを同時に行うためにファイルを開こうとしています。ファイルに(1秒ごとに)書き込むプログラムと、ファイルから読み取るプログラムが1つずつあります。UNIXでは完全に機能しますが、Windowsでは機能しません(すでに開いているファイルを開くことができません)。fopen()でファイルを開きます。
どうすればこの問題を解決できますか?
EDIT2:
_fsopen
を使用していることを確認し、それFILE *
に応じて共有フラグを設定します。
編集:
まず第一に、いくつかのコード:これは私がファイルを開くために使用した方法です
FILE* f = NULL;
int res = fopen_s(&f, "c:\\temp\\File1.txt", "w");
if (res != 0) return;
while (true) {
Sleep(1000);
fprintf_s(f , "Some data");
}
fclose(f);
読み取りは他のアプリケーションで行われましたが、fscanf
代わりに実行されました。
修正されたコード:
char d[] = "data";
HANDLE h = CreateFile("c:\\temp\\f.txt", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, /*FILE_ATTRIBUTE_NORMAL*/ FILE_FLAG_WRITE_THROUGH, NULL);
if (h == INVALID_HANDLE_VALUE) return 0;
DWORD bytesW;
while(true) {
Sleep(100);
WriteFile(h, d, strlen(d), &bytesW, NULL);
}
CloseHandle(h);
return 0;