Sto provando ad aprire un file per scrivere e leggere contemporaneamente, in Windows. Ho un programma che scrive (ogni secondo) nel file e uno che legge da esso. In Unix funziona perfettamente ma non funziona in Windows (non riesco ad aprire un file già aperto). Apro il file con fopen().(Windows) Apre lo stesso file contemporaneamente
Come posso risolvere questo problema?
EDIT2:
check out _fsopen
usa FILE *
, e impostare il flag di condivisione di conseguenza.
EDIT:
Prima di tutto, un po 'di codice: questo è il modo che ho usato per aprire il 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);
Il letto è stato in altri applicaiton, ma lo ha fatto fscanf
invece.
Il codice fisso:
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;
Forse questo aiuterà: http://stackoverflow.com/questions/11566930/can-i-allow-multiple-programs-to-read-from-the-same-file-at-the-same-time – Nim
Magari aggiungi semplici esempi (come i programmi open e sleep) che funzionano su unix, quindi è più facile per qualcuno fare il codice Win facendo lo stesso. – hyde
Si prega di mostrare il codice. Un rapido test su VS 2008 a VS 2012 indica che non c'è alcun problema con l'uso di 'fopen()' per aprire un file per scrivere e leggere contemporaneamente ('fopen()' usa l'accesso 'FILE_SHARE_READ | FILE_SHARE_WRITE'). –