2017-08-06 8 views
7

मैंने वेबसाइब्स को ट्यूटोरियल शुरू करने का पालन किया http://webassembly.org/getting-started/developers-guide/क्या मैं Webassembly का उपयोग करके डिस्क से फ़ाइलों को पढ़ सकता हूं?

यह ठीक काम करता है और "हैलो, दुनिया!" प्रदर्शित करता है ब्राउज़र में संदेश।

फिर मैंने एक छोटा सी ++ कोड आज़माया, जो एक टेक्स्ट फ़ाइल खोलता है और फ़ाइल पढ़ने के बाद गणना (10 * 20) करता है।

emcc फ़ाइल को ठीक से संकलित करता है, कोई त्रुटि नहीं।

लेकिन जब मैं emrun चलाकर HTTP पर फ़ाइल की सेवा करता हूं, तो यह फ़ाइल नहीं खोल सकता है।

यह वह जगह है कि मैं क्या emrun वेब कंसोल में देखें:

Unable to open file 
200 

वहाँ है स्थानीय डिस्क से फ़ाइलें खोलने के लिए कुछ सीमाएं हैं? निष्पादन वातावरण WebAssembly एक सुरक्षित में चलाने के लिए निर्दिष्ट किया जाता है, सैंडबॉक्स -

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

सुरक्षित रखें। अन्य वेब कोड की तरह, यह ब्राउज़र की समान-उत्पत्ति और अनुमति नीतियों को लागू करेगा।

तो संक्षिप्त उत्तर है - हाँ, प्रतिबंध हैं। आपके पास डिस्क पर फ़ाइलों तक पहुंच नहीं है। आपके पास बस स्मृति की ब्लॉक है, डब्ल्यूएएसएम कोड जेएस से बुलाया जा सकता है और डब्ल्यूएएसएम जेएस कार्यों को भी कॉल कर सकता है।

लेकिन, ईएमएसस्क्रिप्ट में एक दिलचस्प विशेषता है - WASM में आपके पास फाइलों के साथ अपनी "वर्चुअल" फ़ाइल सिस्टम हो सकती है। आप इसे संकलन समय के दौरान कुछ कॉन्स्ट फाइलों को "संलग्न" करने के लिए उपयोग कर सकते हैं और निष्पादन समय पर उन्हें पढ़ सकते हैं। https://kripken.github.io/emscripten-site/docs/api_reference/Filesystem-API.html

संबंधित मुद्दे

 संबंधित मुद्दे