【发布时间】:2011-09-02 08:59:41
【问题描述】:
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
我预计这很好。因为系统将关闭文件句柄,然后文件系统驱动程序在其关闭处理程序中刷新未刷新的数据。但事实并非如此。 我在 EXT4,ubuntu 11.10 上测试了这段代码
问题:
我认为所有文件系统都必须在他关闭处理时刷新未刷新的数据。
Posix 没有规则?
P.S 此代码在 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;
}
编辑:
我用系统调用write再次测试了它。它冲洗得很好。
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;
}
【问题讨论】: