Đọc tài liệu API: Lỗi và quyền sở hữu

Hiểu các đơn vị đối số, cấu trúc kết quả, thành công một phần và vòng đời tài nguyên.

Wave Foundation

Đọc tuyên bố

Ký hiệu sau đây mô tả việc khai báo hàm và không phải là toàn bộ tệp thực thi.

io_read(fd: i64, buf: ptr<u8>, len: i64) -> i64

fd là bộ mô tả mở, buf là bộ nhớ do người gọi cung cấp và len là số byte có sẵn để ghi. i64 không có nghĩa là độ dài âm là hợp lệ. Giá trị trả về là số byte thực tế được đọc, không phải độ dài yêu cầu, do đó chỉ sử dụng phạm vi được trả về.

Biểu hiện lỗi khác nhau tùy theo chức năng

đường vâng Phương pháp kiểm tra
Con trỏ hoặc null mem_alloc null Truy cập bộ nhớ sau khi kiểm tra
số byte hoặc số âm io_read Lỗi âm, 0 EOF, dữ liệu dương
mã trạng thái buffer_push Lỗi so sánh liên tục với BUFFER_OK
Thành công và giá trị NetResult<T> Sau khi kiểm tra ok, hãy sử dụng value
Bao gồm tiến độ một phần RandomFillResult Kiểm tra ok, written, error cùng nhau.

Nó chỉ xem xét số lượng lỗi và không so sánh chúng với các hằng số trong các mô-đun khác. Ví dụ: số lỗi env và OS errno không phải là cùng một hệ thống. Lỗi ban đầu trong WASI không nên được hiểu là Linux errno.

sở hữu và cho thuê

  • Owned: Khi có được bộ nhớ được phân bổ, tệp đang mở hoặc ổ cắm mở, nó có trách nhiệm gọi bản phát hành/đóng tương ứng.
  • Borrow: Byte view hoặc bộ đệm được truyền cho hàm đề cập đến bộ nhớ hiện có. Nếu một hàm không chỉ định rằng nó nhận được quyền sở hữu thì hàm gọi sẽ giữ quyền kiểm soát.
  • Đối số đầu ra: Truyền một không gian lưu trữ hợp lệ nơi kết quả có thể được ghi vào hàm nhận nó, chẳng hạn như out_value: ptr<T>. Đảm bảo rằng hợp đồng nêu rõ rằng kết quả chỉ có giá trị nếu thành công.

Sao chép cấu trúc Buffer có thể khiến cả hai bản sao trỏ đến cùng một phân bổ. Không giải phóng từng bản sao riêng biệt. Một con trỏ mượn sẽ trở nên không hợp lệ sau khi việc phân bổ được giải phóng hoặc phân bổ lại. Chuỗi ký tự không phải là bộ đệm có thể ghi.

Thất bại không có nghĩa là quay trở lại trạng thái trước đó

io_write_all có thể bị lỗi sau khi ghi một số byte. Các byte đã được ghi ra bên ngoài sẽ không được trả lại. Mặt khác, việc đọc checked cursor của bytes sẽ giữ nguyên vị trí và giá trị đầu ra nếu thất bại. Những khác biệt này được chỉ định bởi API.

Nếu bạn cũng muốn thực hành xử lý lỗi, hãy tiếp tục với Trình đọc tập tin và Tin nhắn nhị phân.