2017-08-06 13 views
7

Tôi đã làm theo hướng dẫn bắt đầu sử dụng Webassembly http://webassembly.org/getting-started/developers-guide/Tôi có thể đọc tệp từ đĩa bằng cách sử dụng Webassembly không?

Nó hoạt động tốt và hiển thị "Xin chào, thế giới!" tin nhắn trong trình duyệt.

Sau đó, tôi đã thử một mã C++ nhỏ, mở một tệp văn bản và thực hiện phép tính (10 * 20) sau khi đọc tệp.

emcc đã biên dịch tệp hoàn toàn không có lỗi.

Nhưng khi tôi phân phối tệp qua HTTP bằng cách chạy emrun, nó không thể mở tệp.

Đây là những gì tôi nhìn thấy trong emrun web console:

Unable to open file 
200 

Có bất kỳ hạn chế để mở tập tin từ ổ đĩa cục bộ?

[[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

tất nhiên có những hạn chế. Nếu không có hạn chế, thì webassembly sẽ là một lỗ hổng bảo mật lớn lớn. –

+0

Bạn có nhận được giải pháp nào cho điều này không? –

Trả lời

6

Giữ an toàn - WebAssembly được quy định để được chạy một cách an toàn, sandboxed môi trường thực thi. Giống như các mã web khác, nó sẽ thực thi các chính sách quyền và cùng nguồn gốc của trình duyệt .

Vì vậy, câu trả lời ngắn gọn là - có, có những hạn chế. Bạn không có quyền truy cập vào các tệp trên đĩa. Bạn chỉ có khối bộ nhớ, mã WASM có thể được gọi từ JS và WASM cũng có thể gọi các hàm JS.

Nhưng, có một tính năng thú vị trong Emscripten - trong WASM bạn có thể có hệ thống tệp "ảo" của riêng bạn với các tệp. Bạn có thể sử dụng nó để "đính kèm" một số tập tin const trong thời gian biên dịch và đọc chúng tại thời gian thực hiện. Xem https://kripken.github.io/emscripten-site/docs/api_reference/Filesystem-API.html

Các vấn đề liên quan