2014-04-29 4 views
2

내가 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); 
} 
+0

온 전성 검사로 모든 ​​emscripten 특정 항목을 제거하고 기본 응용 프로그램으로 실행했습니다. 그것은 예상대로 동작합니다. 실행될 때마다 파일에 시간이 추가되고 파일이 다시 생성되지 않습니다. –

답변

2

이 문제는 여기에있을 것 같다 코드의 적절한 비트의 ... 때마다 그 실행 파일을 다시 보인다 syncfs는 비동기 작업이지만 동기화 된 것처럼 취급합니다.

백업 저장소에서 동기화 할 때 syncfs의 콜백이 실행될 때까지 기다렸다가 파일을 열고 읽어야합니다.

예로서, 다음을 참조 https://github.com/kripken/emscripten/blob/master/tests/fs/test_idbfs_sync.c

그것은 콜백이 완료되면 C 함수 호출에 ccall()를 사용한다. 또한 emscripten_exit_with_live_runtime을 사용하여 주 프로그램이 돌아 왔을 때도 프로그램을 활성 상태로 유지합니다.

+0

시간을내어 이해하는 데 도움을 주셔서 감사합니다. - 제대로 작동 할 수 있다고 확신합니다! 지금. - 코딩하는 동안 제안한 샘플을 참조했는데 ccall의 중요성과 이유가 코드의 주석과 함께 할 수 있습니다! –