2017-08-06 1 views
7

私はWebアセンブリのチュートリアルに従いましたhttp://webassembly.org/getting-started/developers-guide/Webassemblyを使用してディスクからファイルを読み取ることはできますか?

「Hello、world!」と表示されました。メッセージをブラウザに表示します。

私はテキストファイルを開き、ファイルを読み込んだ後で計算(10 * 20)を実行する小さなC++コードを試しました。

emccはファイルをコンパイルしてもエラーは発生しません。

しかし、emrunを実行してHTTP経由でファイルを提供すると、ファイルを開くことができません。

私はemrun Webコンソールに何を参照してください。これは、次のとおりです。

Unable to open file 
200 

ローカルディスクからファイルを開くための任意の制限はありますか?

[[email protected] hello]$ cat pfile.cpp 
    #include <iostream> 
    #include <fstream> 
    #include <string> 
    using namespace std; 

    int main() { 
    string line; 
    int a, b, c; 
    ifstream myfile("test.txt"); 
    if (myfile.is_open()) { 
     while (getline (myfile, line)) { 
     cout << line << endl; 
     } 
     myfile.close(); 
    } 
    else cout << "Unable to open file" << endl; 
    a = 10; 
    b = 20; 
    c = a * b; 
    cout << c << endl; 
    return 0; 
    } 

    [[email protected] hello]$ emcc pfile.cpp -s WASM=1 -o pfile.html -v                
INFO:root:(Emscripten: Running sanity checks)                      
clang version 4.0.0 (https://github.com/kripken/emscripten-fastcomp-clang.git c7c210fee24e0227f882337521b25b1ed9c36d5b) (https://github.com/kripken/emscripten-fastcomp.git 90b726ede4acf47c1bca089de6c79a0b8f2c5d9a) (emscripten 1.37.18 : 1.37.18)               
Target: asmjs-unknown-emscripten 
Thread model: posix 
InstalledDir: /home/thiago/Downloads/emsdk/clang/fastcomp/build_incoming_64/bin 
"/home/thiago/Downloads/emsdk/clang/fastcomp/build_incoming_64/bin/clang-4.0" -cc1 -triple asmjs-unknown-emscripten -emit-llvm-bc -emit-llvm-uselists -disable-free -main-file-name pfile.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -no-integrated-as -mconstructor-aliases -v -dwarf-column-info -debugger-tuning=gdb -coverage-notes-file /tmp/tmpV3VHOz/pfile_0.gcno -nostdsysteminc -nobuiltininc -resource-dir /home/thiago/Downloads/emsdk/clang/fastcomp/build_incoming_64/bin/../lib/clang/4.0.0 -D __EMSCRIPTEN_major__=1 -D __EMSCRIPTEN_minor__=37 -D __EMSCRIPTEN_tiny__=18 -D _LIBCPP_ABI_VERSION=2 -Werror=implicit-function-declaration -std=c++03 -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir /home/thiago/hello -ferror-limit 19 -fmessage-length 164 -fobjc-runtime=gnustep -fcxx-exceptions -fexceptions -fdiagnostics-show-option -nobuiltininc -nostdsysteminc -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/libcxx -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/lib/libcxxabi/include -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/compat -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/include -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/SSE -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/libc -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/lib/libc/musl/arch/emscripten -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/local/include -isystem/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/SDL -o /tmp/tmpV3VHOz/pfile_0.o -x c++ pfile.cpp 
clang -cc1 version 4.0.0 based upon LLVM 4.0.0 default target x86_64-unknown-linux-gnu 
#include "..." search starts here: 
#include <...> search starts here: 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/libcxx 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/lib/libcxxabi/include 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/compat 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/include 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/SSE 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/libc 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/lib/libc/musl/arch/emscripten 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/local/include 
/home/thiago/Downloads/emsdk/emscripten/incoming/system/include/SDL 
End of search list. 
[[email protected] hello]$ emrun --no_browser --port 8080 . 
+2

もちろん制限があります。制限がなければ、ウェブアセンブリは大きな大きな巨大なセキュリティホールになります。 –

+0

これにはどんな解決策がありましたか? –

答えて

6

安全に保つ - WebAssemblyは安全で、サンドボックス 実行環境で実行するように指定されています。他のWebコードと同様に、ブラウザーの同じ起源とアクセス許可のポリシーを適用します( )。

したがって、短い答えは - はいですが、制限があります。ディスク上のファイルにアクセスする権限はありません。あなたはちょうどメモリのブロックを持っています、WASMコードはJSから呼び出すことができ、またWASMはJS関数を呼び出すことができます。

Emscriptenには興味深い機能が1つあります.WASMでは、ファイルを持つ独自の「仮想」ファイルシステムを持つことができます。コンパイル時にいくつかのconstファイルを "attach"し、実行時にそれらを読むことができます。 https://kripken.github.io/emscripten-site/docs/api_reference/Filesystem-API.html

関連する問題