fs: ファイル読み込み(WASI / LLVM)
目的:
fs_read_to_bytes/fs_read_to_stringなど、target 非依存のファイル読み込み API を提供します。
実装(アルゴリズム):
- wasm では WASI
path_open/fd_read/fd_closeを呼びます。 - llvm では libc
open/read/closeを使って同名 API を互換実装します。 - 読み込み結果は
ByteBufまたは str に変換します。
注意(重要):
- 権限/パス解決はホスト環境に依存します。
- UTF-8 検証は行わず、バイト列をそのまま str に格納します。
計算量:
- 読み込みバイト数に比例 (O(n))
fs_open_read: ファイルを読み込み専用で開く
目的:
- path を開き、fd を返します。
実装(アルゴリズム):
- path_open を呼び、fd_out から fd を取得します。
注意(重要):
- dirfd は 3 (preopen) を仮定します。
- 失敗時は Err(errno) を返します。
計算量:
- O(1)
fs_open_read: 使い方の最小例
fs_open_readの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/fs" as *
fn main <()*>()> ():
fs_open_read "sample";fs_read_fd_bytes: fd から全て読み込んで ByteBuf を返す
目的:
- fd の内容をすべて読み込み、バイト列として返します。
実装(アルゴリズム):
- 64KiB から開始する連続 buffer を必要に応じて再確保し、EOF まで
fd_readを繰り返します。
注意(重要):
- 途中でエラーが出た場合は Err(errno) を返します。
計算量:
- O(n)
fs_read_fd_bytes: 使い方の最小例
fs_read_fd_bytesの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/fs" as *
fn main <()*>()> ():
fs_read_fd_bytes 0;fs_bytes_to_string: ByteBuf を str に変換する
目的:
- バイト列をそのまま str 形式に詰め直します。
実装(アルゴリズム):
io_bytebuf_to_strを使い、所有 buffer をそのまま str 形式へ詰め替えます。
注意(重要):
- UTF-8 の検証は行いません。
計算量:
- O(n)
fs_bytes_to_string: 使い方の最小例
fs_bytes_to_stringの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/fs" as *
fn main <()*>()> ():
fs_bytes_to_string io_bytebuf_from_str "A";fs_read_to_bytes: ファイルを読み込んで ByteBuf を返す
目的:
- path を開き、内容をバイト列として返します。
実装(アルゴリズム):
- fs_open_read → fs_read_fd_bytes → fd_close の順に処理します。
注意(重要):
- 失敗時は Err(errno) を返します。
計算量:
- O(n)
fs_read_to_bytes: 使い方の最小例
fs_read_to_bytesの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/fs" as *
fn main <()*>()> ():
fs_read_to_bytes "sample";fs_read_to_string: ファイルを読み込んで str を返す
目的:
- path を読み込み、文字列として返します。
実装(アルゴリズム):
- fs_read_to_bytes で読み込み、fs_bytes_to_string で変換します。
注意(重要):
- UTF-8 検証は行いません。
- 失敗時は Err(errno) を返します。
計算量:
- O(n)
fs_read_to_string: 使い方の最小例
fs_read_to_stringの典型的な使い方を最小構成で示します。- 値を返す関数は結果の受け取り方も合わせて確認できます。
- 例は用途が伝わる最短の呼び出しに絞っています。
- 境界条件や詳細な正当性検証は専用テストで扱います。
TESTskip
#entry main
#target std
#import "std/fs" as *
fn main <()*>()> ():
fs_read_to_string "sample";