Documentation ¶
Overview ¶
Package wasi contains Go-defined functions to access system calls, such as opening a file, similar to Go's x/sys package. These are accessible from WebAssembly-defined functions via importing ModuleSnapshotPreview1.
See https://github.com/WebAssembly/WASI
Example ¶
This is an example of how to use WebAssembly System Interface (WASI) with its simplest function: "proc_exit".
See https://github.com/heeus/hwazero/tree/main/examples/wasi for another example.
// Choose the context to use for function calls. ctx := context.Background() // Create a new WebAssembly Runtime. r := wazero.NewRuntime() // Instantiate WASI, which implements system I/O such as console output. wm, err := InstantiateSnapshotPreview1(ctx, r) if err != nil { log.Fatal(err) } defer wm.Close() // Override default configuration (which discards stdout). config := wazero.NewModuleConfig().WithStdout(os.Stdout) // InstantiateModuleFromCodeWithConfig runs the "_start" function which is like a "main" function. _, err = r.InstantiateModuleFromCodeWithConfig(ctx, []byte(` (module (import "wasi_snapshot_preview1" "proc_exit" (func $wasi.proc_exit (param $rval i32))) (func $main i32.const 2 ;; push $rval onto the stack call $wasi.proc_exit ;; return a sys.ExitError to the caller ) (export "_start" (func $main)) ) `), config.WithName("wasi-demo")) // Print the exit code if exitErr, ok := err.(*sys.ExitError); ok { fmt.Printf("exit_code: %d\n", exitErr.ExitCode()) }
Output: exit_code: 2
Index ¶
Examples ¶
Constants ¶
const ModuleSnapshotPreview1 = "wasi_snapshot_preview1"
ModuleSnapshotPreview1 is the module name WASI functions are exported into See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md
Variables ¶
This section is empty.
Functions ¶
func ErrnoName ¶
ErrnoName returns the POSIX error code name, except ErrnoSuccess, which is not an error. Ex. Errno2big -> "E2BIG"
func InstantiateSnapshotPreview1 ¶
InstantiateSnapshotPreview1 instantiates ModuleSnapshotPreview1, so that other modules can import them.
Note: All WASI functions return a single Errno result, ErrnoSuccess on success.
Types ¶
type Errno ¶
type Errno = uint32 // alias for parity with wasm.ValueType
Errno are the error codes returned by WASI functions.
Note: This is not always an error, as ErrnoSuccess is a valid code. Note: Codes are defined even when not relevant to WASI for use in higher-level libraries or alignment with POSIX. See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-errno-enumu16 See https://linux.die.net/man/3/errno
const ( // ErrnoSuccess No error occurred. System call completed successfully. ErrnoSuccess Errno = iota // Errno2big Argument list too long. Errno2big // ErrnoAcces Permission denied. ErrnoAcces // ErrnoAddrinuse Address in use. ErrnoAddrinuse // ErrnoAddrnotavail Address not available. ErrnoAddrnotavail // ErrnoAfnosupport Address family not supported. ErrnoAfnosupport // ErrnoAgain Resource unavailable, or operation would block. ErrnoAgain // ErrnoAlready Connection already in progress. ErrnoAlready // ErrnoBadf Bad file descriptor. ErrnoBadf // ErrnoBadmsg Bad message. ErrnoBadmsg // ErrnoBusy Device or resource busy. ErrnoBusy // ErrnoCanceled Operation canceled. ErrnoCanceled // ErrnoChild No child processes. ErrnoChild // ErrnoConnaborted Connection aborted. ErrnoConnaborted // ErrnoConnrefused Connection refused. ErrnoConnrefused // ErrnoConnreset Connection reset. ErrnoConnreset // ErrnoDeadlk Resource deadlock would occur. ErrnoDeadlk // ErrnoDestaddrreq Destination address required. ErrnoDestaddrreq // ErrnoDom Mathematics argument out of domain of function. ErrnoDom // ErrnoDquot Reserved. ErrnoDquot // ErrnoExist File exists. ErrnoExist // ErrnoFault Bad address. ErrnoFault // ErrnoFbig File too large. ErrnoFbig // ErrnoHostunreach Host is unreachable. ErrnoHostunreach // ErrnoIdrm Identifier removed. ErrnoIdrm // ErrnoIlseq Illegal byte sequence. ErrnoIlseq // ErrnoInprogress Operation in progress. ErrnoInprogress // ErrnoIntr Interrupted function. ErrnoIntr // ErrnoInval Invalid argument. ErrnoInval // ErrnoIo I/O error. ErrnoIo // ErrnoIsconn Socket is connected. ErrnoIsconn // ErrnoIsdir Is a directory. ErrnoIsdir // ErrnoLoop Too many levels of symbolic links. ErrnoLoop // ErrnoMfile File descriptor value too large. ErrnoMfile // ErrnoMlink Too many links. ErrnoMlink // ErrnoMsgsize Message too large. ErrnoMsgsize // ErrnoMultihop Reserved. ErrnoMultihop // ErrnoNametoolong Filename too long. ErrnoNametoolong // ErrnoNetdown Network is down. ErrnoNetdown // ErrnoNetreset Connection aborted by network. ErrnoNetreset // ErrnoNetunreach Network unreachable. ErrnoNetunreach // ErrnoNfile Too many files open in system. ErrnoNfile // ErrnoNobufs No buffer space available. ErrnoNobufs // ErrnoNodev No such device. ErrnoNodev // ErrnoNoent No such file or directory. ErrnoNoent // ErrnoNoexec Executable file format error. ErrnoNoexec // ErrnoNolck No locks available. ErrnoNolck // ErrnoNolink Reserved. ErrnoNolink // ErrnoNomem Not enough space. ErrnoNomem // ErrnoNomsg No message of the desired type. ErrnoNomsg // ErrnoNoprotoopt No message of the desired type. ErrnoNoprotoopt // ErrnoNospc No space left on device. ErrnoNospc // ErrnoNosys function not supported. ErrnoNosys // ErrnoNotconn The socket is not connected. ErrnoNotconn // ErrnoNotdir Not a directory or a symbolic link to a directory. ErrnoNotdir // ErrnoNotempty Directory not empty. ErrnoNotempty // ErrnoNotrecoverable State not recoverable. ErrnoNotrecoverable // ErrnoNotsock Not a socket. ErrnoNotsock // ErrnoNotsup Not supported, or operation not supported on socket. ErrnoNotsup // ErrnoNotty Inappropriate I/O control operation. ErrnoNotty // ErrnoNxio No such device or address. ErrnoNxio // ErrnoOverflow Value too large to be stored in data type. ErrnoOverflow // ErrnoOwnerdead Previous owner died. ErrnoOwnerdead // ErrnoPerm Operation not permitted. ErrnoPerm // ErrnoPipe Broken pipe. ErrnoPipe // ErrnoProto Protocol error. ErrnoProto // ErrnoProtonosupport Protocol error. ErrnoProtonosupport // ErrnoPrototype Protocol wrong type for socket. ErrnoPrototype // ErrnoRange Result too large. ErrnoRange // ErrnoRofs Read-only file system. ErrnoRofs // ErrnoSpipe Invalid seek. ErrnoSpipe // ErrnoSrch No such process. ErrnoSrch // ErrnoStale Reserved. ErrnoStale // ErrnoTimedout Connection timed out. ErrnoTimedout // ErrnoTxtbsy Text file busy. ErrnoTxtbsy // ErrnoXdev Cross-device link. ErrnoXdev // ErrnoNotcapable Extension: Capabilities insufficient. ErrnoNotcapable )
Note: Below prefers POSIX symbol names over WASI ones, even if the docs are from WASI. See https://linux.die.net/man/3/errno See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#variants-1