, Почему данные не сбрасывают в файл на выходе процесса?

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);
}

результат: Никакие данные не записали в 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;
}

:
я протестировал его снова с системным вызовом запись . И это было сброшено хорошо.

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;
}
6
задан Benjamin 3 September 2011 в 10:15
поделиться