Emscripten和持久性

时间:2014-04-29 22:11:30

标签: persistence emscripten

我正在尝试使用emscripten进行某种持久性...

我正在尝试做的事情(作为概念证明)是每次点击页面时将时间添加到文件末尾

目前似乎每次运行时都会重新创建文件......

这是代码的相关部分

EM_ASM(
    FS.mkdir('/IDBFS');
    FS.mount(IDBFS, {}, '/IDBFS');
    FS.syncfs(true, function (err) {
        assert(!err);
    }); // sync FROM backing store
);

int c;
FILE *file;
file = fopen("/IDBFS/test.txt", "a");

if (file) {
    time_t rawtime;
    struct tm * timeinfo;

    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    fprintf ( file, "time:%s\n", asctime (timeinfo) );

    fclose(file);

    EM_ASM(     
        FS.syncfs(function (err) { // sync TO backing store
            assert(!err);
        });
    );

    file = fopen("/IDBFS/test.txt", "r");
    while ((c = getc(file)) != EOF)
        printf("%c",c);
    fclose(file);
}

1 个答案:

答案 0 :(得分:3)

这里的问题似乎是syncfs是一个异步操作,但你将它视为同步操作。

您必须等到同步的回调被触发(从后备存储同步时)才能打开并从您的文件中读取。

例如,请参阅:https://github.com/kripken/emscripten/blob/master/tests/fs/test_idbfs_sync.c

一旦回调完成,它就使用ccall()调用C函数。另外,请注意使用emscripten_exit_with_live_runtime即使main返回也能使程序保持活动状态。