int main(int argc, char *argv[])
{
FILE *fp = fopen("a.txt", "wt");
fprintf(fp, "AAAA");
// No flush. and No close
raise(SIGTERM);
exit(EXIT_SUCCESS);
}
result: No data has written to a.txt
Perché i dati non vengono scaricati sul file all'uscita del processo?
mi aspettavo questo va bene. Perché il sistema chiuderà l'handle del file e quindi il driver del filesystem svuota i dati non spillati nel suo gestore Chiudi. Ma non lo era. Ho testato questo codice su EXT4, ubuntu 11.10
Domanda: Ho pensato che TUTTI i filesystem devono scaricare dati non aggiornati durante la sua elaborazione ravvicinata.
Posix non ha la regola?
P.S Questo codice ha funzionato bene (lavata bene) su NTFS, Win7
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE h = CreateFile(L"D:\\a.txt", GENERIC_READ|GENERIC_WRITE,
0, 0, OPEN_ALWAYS, 0, 0);
BYTE a[3];
memset(a, 'A', 3);
DWORD dw;
WriteFile(h, (PVOID)a, 3, &dw, 0);
TerminateProcess(GetCurrentProcess(), 1);
return 0;
}
Edit:
ho provato di nuovo con sistema di chiamata write
. Ed è stato lavato bene.
int main(int argc, char** argv)
{
int fd = open("a.txt", O_CREAT|O_TRUNC|O_WRONLY);
char buf[3];
memset(buf, 'A', 3);
size_t result = write(fd, buf, 3);
raise(SIGTERM);
exit(EXIT_SUCCESS);
return 0;
}
Grazie, lo testerò di nuovo con le chiamate di sistema, non crt, quando arrivo a casa – Benjamin