Luvref

Nvim 的 :help 頁面,由 產生,來源為 原始碼,並使用 tree-sitter-vimdoc 解析器。


LUV 參考手冊
此檔案記錄了 LibUV 函式庫的 Lua 綁定,該函式庫用於 Nvim 的事件迴圈,並且可以通過 Lua 的 vim.uv 存取(例如,uv.version() 會以 vim.uv.version() 的形式公開)。
有關本手冊的資訊,請參閱 luv-credits
如需更多範例,請參閱 https://github.com/luvit/luv/tree/master/examples
luv (https://github.com/luvit/luv) 專案提供了在 Lua 程式碼中存取多平台支援函式庫 libuv (https://github.com/libuv/libuv) 的能力。它最初是為 luvit (https://github.com/luvit/luvit) 專案開發,作為內建的 uv 模組,但也可以在其他 Lua 環境中使用。
有關核心 libuv 函式庫的更多資訊,請參閱原始的 libuv 文件頁面 (https://docs.libuv.org/)。
TCP 回聲伺服器範例
這是一個顯示 TCP 回聲伺服器的小範例
local uv = vim.uv
local server = uv.new_tcp()
server:bind("127.0.0.1", 1337)
server:listen(128, function (err)
  assert(not err, err)
  local client = uv.new_tcp()
  server:accept(client)
  client:read_start(function (err, chunk)
    assert(not err, err)
    if chunk then
      client:write(chunk)
    else
      client:shutdown()
      client:close()
    end
  end)
end)
print("TCP server listening at 127.0.0.1 port 1337")
uv.run() -- an explicit run call is necessary outside of luvit
模組佈局
luv 函式庫包含一個單一的 Lua 模組,為簡潔起見,以下稱之為 uv。此模組主要由名稱與其原始 libuv 版本相對應的函式組成。例如,libuv 函式 uv_tcp_binduv.tcp_bind() 中有一個 luv 版本。目前,只有兩個非函式欄位:uv.constantsuv.errno,它們是表格。
函式 vs 方法
除了具有簡單的函式之外,luv 還提供一個可選的方法式 API。例如,uv.tcp_bind(server, host, port) 也可以寫成 server:bind(host, port) 來調用。請注意,第一個參數 server 變成物件,而 tcp_ 從函式名稱中移除。方法形式會在下方記錄存在的地方。
同步 vs 非同步函式
接受回呼的函式是非同步的。這些函式可能會立即向呼叫者返回結果以指示其初始狀態,但它們的最終執行會被延遲到至少下一個 libuv 迴圈迭代。完成後,它們的回呼會被執行,並將任何結果傳遞給它。
不接受回呼的函式是同步的。這些函式會立即將結果返回給呼叫者。
某些(通常是 FS 和 DNS)函式可以同步或非同步運行。如果為這些函式提供了回呼,它們會以非同步方式運行;如果沒有提供回呼,它們會以同步方式運行。
虛擬類型
定義了一些獨特的類型。這些不是 Lua 中的實際類型,但它們在這裡用於方便記錄一致的行為
fail:一個可斷言的 nil, string, string 元組(請參閱 luv-error-handling
callable:一個 function;或一個帶有 __call 元方法的 tableuserdata
buffer:一個 string 或一個 string 的循序 table
threadargsnilbooleannumberstringuserdata 類型的可變參數 (...);參數數量限制為 9 個。
此文件主要是對 libuv API 文件 (https://docs.libuv.org/en/v1.x/api.html) 在 luv 的 Lua API 環境中的重新描述。低階實作細節和未公開的 C 函式和類型在這裡沒有記錄,除非它們與 Lua 模組中看到的行為相關。
luv-error-handling — 錯誤處理
luv-version-checking — 版本檢查
uv_loop_t — 事件迴圈
uv_req_t — 基礎請求
uv_handle_t — 基礎處理
uv_timer_t — 計時器處理
uv_prepare_t — 準備處理
uv_check_t — 檢查處理
uv_idle_t — 空閒處理
uv_async_t — 非同步處理
uv_poll_t — 輪詢處理
uv_signal_t — 信號處理
uv_process_t — 處理程序處理
uv_stream_t — 資料流處理
uv_tcp_t — TCP 處理
uv_pipe_t — 管道處理
uv_tty_t — TTY 處理
uv_udp_t — UDP 處理
uv_fs_event_t — FS 事件處理
uv_fs_poll_t — FS 輪詢處理
luv-file-system-operations — 檔案系統操作
luv-thread-pool-work-scheduling — 執行緒池工作排程
luv-dns-utility-functions — DNS 實用函式
luv-threading-and-synchronization-utilities — 執行緒處理和同步實用程式
luv-miscellaneous-utilities — 其他實用程式
luv-metrics-operations — 指標操作

錯誤處理 luv-error-handling

在 libuv 中,錯誤是負數常數;然而,雖然這些錯誤通過 uv.errno 公開,但用於處理它們的函式不會向 luv 使用者公開。相反,如果遇到內部錯誤,luv 函式會向呼叫者返回一個可斷言的 nil, err, name 元組。
nil 慣用地表示失敗
err 是一個字串,格式為 {name}: {message}
{name}uv_err_name 內部提供的錯誤名稱
{message}uv_strerror 內部提供的人類可讀訊息
name 是用於建構 err 的相同字串
此元組在下文中稱為 fail 虛擬類型。
當函式成功呼叫時,它將返回與函式操作相關的值,或返回整數 0 以指示成功,或者有時什麼都不返回。這些情況將在下面記錄。
uv.errno uv.errno
一個表格值,將錯誤常數作為映射公開,其中鍵是錯誤名稱(不帶 UV_ 前綴),其值是負數。有關更多詳細資訊,請參閱 Libuv 的「錯誤常數」頁面。 (https://docs.libuv.org/en/v1.x/errors.html#error-constants)
E2BIG:參數列表過長。
EACCES:權限被拒絕。
EADDRINUSE:地址已在使用中。
EADDRNOTAVAIL:地址不可用。
EAFNOSUPPORT:地址族不受支援。
EAGAIN:資源暫時不可用。
EAI_ADDRFAMILY:地址族不受支援。
EAI_AGAIN:暫時性故障。
EAI_BADFLAGS:ai_flags 值錯誤。
EAI_BADHINTS:hints 的值無效。
EAI_CANCELED:請求已取消。
EAI_FAIL:永久性故障。
EAI_FAMILY:ai_family 不受支援。
EAI_MEMORY:記憶體不足。
EAI_NODATA:沒有地址。
EAI_NONAME:未知的節點或服務。
EAI_OVERFLOW:參數緩衝區溢位。
EAI_PROTOCOL:解析的協定未知。
EAI_SERVICE:服務對 socket 類型不可用。
EAI_SOCKTYPE:socket 類型不受支援。
EALREADY:連線已在進行中。
EBADF:錯誤的檔案描述符。
EBUSY:資源忙碌或已鎖定。
ECANCELED:操作已取消。
ECHARSET:無效的 Unicode 字元。
ECONNABORTED:軟體導致連線中止。
ECONNREFUSED:連線被拒絕。
ECONNRESET:連線被對等方重設。
EDESTADDRREQ:需要目標地址。
EEXIST:檔案已存在。
EFAULT:系統呼叫參數中的錯誤地址。
EFBIG:檔案過大。
EHOSTUNREACH:主機無法連線。
EINTR:中斷的系統呼叫。
EINVAL:無效的參數。
EIO:I/O 錯誤。
EISCONN:socket 已連線。
EISDIR:在目錄上進行的非法操作。
ELOOP:遇到過多的符號連結。
EMFILE:開啟的檔案過多。
EMSGSIZE:訊息過長。
ENAMETOOLONG:名稱過長。
ENETDOWN:網路已關閉。
ENETUNREACH:網路無法連線。
ENFILE:檔案表格溢位。
ENOBUFS:沒有可用的緩衝區空間。
ENODEV:沒有此類裝置。
ENOENT:沒有此類檔案或目錄。
ENOMEM:記憶體不足。
ENONET:機器不在網路上。
ENOPROTOOPT:協定不可用。
ENOSPC:裝置上沒有剩餘空間。
ENOSYS:函式未實作。
ENOTCONN:socket 未連線。
ENOTDIR:不是目錄。
ENOTEMPTY:目錄不是空的。
ENOTSOCK:在非 socket 上進行 socket 操作。
ENOTSUP:socket 不支援操作。
EOVERFLOW:值對於定義的資料類型而言過大。
EPERM:操作不允許。
EPIPE:管道損壞。
EPROTO:協定錯誤。
EPROTONOSUPPORT:協定不受支援。
EPROTOTYPE:socket 的協定類型錯誤。
ERANGE:結果過大。
EROFS:唯讀檔案系統。
ESHUTDOWN:在傳輸端點關閉後無法傳送。
ESPIPE:無效的搜尋。
ESRCH:沒有此類處理程序。
ETIMEDOUT:連線逾時。
ETXTBSY:文字檔案忙碌。
EXDEV:不允許跨裝置連結。
UNKNOWN:未知錯誤。
EOF:檔案結尾。
ENXIO:沒有此類裝置或地址。
EMLINK:連結過多。
ENOTTY:裝置不適合的 ioctl。
EFTYPE:不適當的檔案類型或格式。
EILSEQ:非法位元組序列。
ESOCKTNOSUPPORT:socket 類型不受支援。
uv.version() uv.version()
返回打包為單一整數的 libuv 版本。每個組件使用 8 位,修補程式編號儲存在 8 個最低有效位中。例如,在 libuv 1.2.3 中,這將是 0x010203。
返回:integer
uv.version_string() uv.version_string()
以字串形式返回 libuv 版本號碼。例如,在 libuv 1.2.3 中,這將是 "1.2.3"。對於非發佈版本,會包含版本字尾。
返回:string

uv_loop_t — 事件迴圈 luv-event-loop uv_loop_t

事件迴圈是 libuv 功能的核心部分。它負責輪詢 I/O 並根據不同的事件來源排程要執行的回呼函數。
在 luv 中,每個載入程式庫的 Lua 狀態都有一個隱含的 uv 迴圈。只要每個執行緒都有自己的 Lua 狀態和對應的 uv 迴圈,您就可以在多執行緒環境中使用此程式庫。此迴圈不會直接在 Lua 模組中向使用者公開。
uv.loop_close() uv.loop_close()
關閉所有內部迴圈資源。在正常執行情況下,迴圈會在被 Lua 垃圾回收時自動關閉,因此不需要明確呼叫 loop_close()。只有在迴圈已完成執行且所有開啟的控制代碼和請求都已關閉後,才呼叫此函數,否則它將傳回 EBUSY
傳回值:0fail
uv.run([{mode}]) uv.run()
參數
modestringnil (預設值:"default")
此函數會執行事件迴圈。它會根據指定的模式而有不同的行為
"default":執行事件迴圈,直到沒有更多活動且已參照的控制代碼或請求為止。如果呼叫了 uv.stop() 且仍有活動的控制代碼或請求,則傳回 true。在所有其他情況下傳回 false
"once":輪詢 I/O 一次。請注意,如果沒有待處理的回呼函數,此函數會封鎖。完成時 (沒有剩餘活動的控制代碼或請求) 傳回 false,如果預期會有更多回呼函數 (表示您應該在未來某個時間再次執行事件迴圈),則傳回 true
"nowait":輪詢 I/O 一次,但如果沒有待處理的回呼函數,則不會封鎖。完成時 (沒有剩餘活動的控制代碼或請求) 傳回 false,如果預期會有更多回呼函數 (表示您應該在未來某個時間再次執行事件迴圈),則傳回 true
傳回值:booleanfail
注意: Luvit 會在載入使用者程式碼後隱式呼叫 uv.run(),但如果您直接使用 luv 繫結,則需要在註冊初始事件回呼函數集之後呼叫此函數,以啟動事件迴圈。
uv.loop_configure({option}, {...}) uv.loop_configure()
參數
optionstring
...:取決於 option,請參閱下方
設定其他迴圈選項。除非另有說明,否則您通常應該在第一次呼叫 uv_run() 之前呼叫此函數。
支援的選項
"block_signal":在輪詢新事件時封鎖訊號。loop_configure() 的第二個引數是訊號名稱 (以小寫字串表示) 或訊號編號。此操作目前僅針對 "sigprof" 訊號實作,以在使用取樣分析器時抑制不必要的喚醒。請求其他訊號將會失敗並傳回 EINVAL
"metrics_idle_time":累積事件迴圈在事件提供者中花費的閒置時間量。此選項是使用 metrics_idle_time() 所必需的。
以下是呼叫此函數的有效範例
uv.loop_configure("block_signal", "sigprof")
傳回值:0fail
注意:請準備好處理 ENOSYS 錯誤;這表示平台不支援迴圈選項。
uv.loop_mode() uv.loop_mode()
如果迴圈正在執行,則傳回一個字串,表示使用的模式。如果迴圈未執行,則傳回 nil
傳回值:stringnil
uv.loop_alive() uv.loop_alive()
如果迴圈中有參照的活動控制代碼、活動請求或正在關閉的控制代碼,則傳回 true;否則,傳回 false
傳回值:booleanfail
uv.stop() uv.stop()
停止事件迴圈,使 uv.run() 盡快結束。這不會早於下一個迴圈迭代發生。如果此函數在封鎖以進行 I/O 之前呼叫,則迴圈在此迭代中不會封鎖以進行 I/O。
傳回值:無。
uv.backend_fd() uv.backend_fd()
取得後端檔案描述元。僅支援 kqueue、epoll 和事件埠。
這可以與 uv.run("nowait") 結合使用,以在一個執行緒中輪詢,並在另一個執行緒中執行事件迴圈的回呼函數
傳回值:integernil
注意:在所有平台上,將 kqueue fd 嵌入另一個 kqueue 輪詢集中都無法運作。新增 fd 並不是錯誤,但它永遠不會產生事件。
uv.backend_timeout() uv.backend_timeout()
取得輪詢逾時。傳回值以毫秒為單位,若無逾時,則為 -1。
返回:integer
uv.now() uv.now()
傳回以毫秒為單位的目前時間戳記。時間戳記會在事件迴圈刻度的開始時快取,詳細資訊和理由請參閱 uv.update_time()
時間戳記會從某個任意的時間點單調遞增。請勿對起點進行假設,您只會失望。
返回:integer
注意:如果您需要次毫秒的精細度,請使用 uv.hrtime()
uv.update_time() uv.update_time()
更新事件迴圈的「現在」概念。Libuv 會在事件迴圈刻度的開始時快取目前時間,以減少與時間相關的系統呼叫次數。
除非您的回呼函數會封鎖事件迴圈較長的時間,否則您通常不需要呼叫此函數,「較長」在某種程度上是主觀的,但可能大約為毫秒或更長。
傳回值:無。
uv.walk({callback}) uv.walk()
參數
callbackcallable
handleuv_handle_t 子類型的 userdata
走訪控制代碼清單:將使用每個控制代碼執行 callback
傳回值:無。
-- Example usage of uv.walk to close all handles that
-- aren't already closing.
uv.walk(function (handle)
  if not handle:is_closing() then
    handle:close()
  end
end)

uv_req_t — 基本請求 luv-base-request uv_req_t

uv_req_t 是所有 libuv 請求類型的基本類型。
uv.cancel({req}) uv.cancel()
> 方法形式 req:cancel()
參數
requv_req_t 子類型的 userdata
取消待處理的請求。如果請求正在執行或已完成執行,則會失敗。目前僅支援取消 uv_fs_tuv_getaddrinfo_tuv_getnameinfo_tuv_work_t 請求。
傳回值:0fail
uv.req_get_type({req}) uv.req_get_type()
> 方法形式 req:get_type()
參數
requv_req_t 子類型的 userdata
傳回指定請求的結構名稱 (例如,uv_fs_t"fs") 和請求類型的 libuv 列舉整數 (uv_req_type)。
傳回值:string, integer

uv_handle_t — 基本控制代碼 luv-base-handle uv_handle_t

uv_handle_t 是所有 libuv 控制代碼類型的基本類型。此處定義的所有 API 函數都適用於任何控制代碼類型。
uv.is_active({handle}) uv.is_active()
> 方法形式 handle:is_active()
參數
handleuv_handle_t 子類型的 userdata
如果控制代碼處於活動狀態,則傳回 true;如果控制代碼處於非活動狀態,則傳回 false。「活動」的意義取決於控制代碼的類型
uv_async_t 控制代碼始終處於活動狀態,且無法停用,除非使用 uv.close() 將其關閉。
uv_pipe_tuv_tcp_tuv_udp_t 等控制代碼 (基本上任何處理 I/O 的控制代碼) 在執行涉及 I/O 的操作時處於活動狀態,例如讀取、寫入、連線、接受新連線等等。
uv_check_tuv_idle_tuv_timer_t 等控制代碼,在呼叫 uv.check_start()uv.idle_start()uv.timer_start() 等函數啟動時處於活動狀態,直到呼叫各自的停止函數停止為止。
傳回值:booleanfail
uv.is_closing({handle}) uv.is_closing()
> 方法形式 handle:is_closing()
參數
handleuv_handle_t 子類型的 userdata
如果控制代碼正在關閉或已關閉,則傳回 true;否則,傳回 false
傳回值:booleanfail
注意:此函數只能在控制代碼初始化和關閉回呼函數到達之間使用。
uv.close({handle} [, {callback}]) uv.close()
> 方法形式 handle:close([callback])
參數
handleuv_handle_t 子類型的 userdata
callbackcallablenil
請求關閉控制代碼。在此呼叫之後,將非同步呼叫 callback。在釋放記憶體之前,必須在每個控制代碼上呼叫此函數。
包裝檔案描述元的控制代碼會立即關閉,但 callback 仍會延遲到事件迴圈的下一次迭代。這讓您有機會釋放與控制代碼相關聯的任何資源。
正在進行中的請求 (例如 uv_connect_tuv_write_t) 會被取消,並以 ECANCELED 非同步呼叫其回呼函數。
傳回值:無。
uv.ref({handle}) uv.ref()
> 方法形式 handle:ref()
參數
handleuv_handle_t 子類型的 userdata
參照指定的控制代碼。參照是等冪的,也就是說,如果控制代碼已參照,則再次呼叫此函數將不會產生任何作用。
傳回值:無。
uv.unref({handle}) uv.unref()
> 方法形式 handle:unref()
參數
handleuv_handle_t 子類型的 userdata
取消參照指定的控制代碼。參照是等冪的,也就是說,如果控制代碼未參照,則再次呼叫此函數將不會產生任何作用。
傳回值:無。
uv.has_ref({handle}) uv.has_ref()
> 方法形式 handle:has_ref()
參數
handleuv_handle_t 子類型的 userdata
如果控制代碼已參照,則傳回 true;否則,傳回 false
傳回值:booleanfail
uv.send_buffer_size({handle} [, {size}]) uv.send_buffer_size()
> 方法形式 handle:send_buffer_size([size])
參數
handleuv_handle_t 子類型的 userdata
sizeintegernil (預設值:0)
取得或設定作業系統用於通訊端的傳送緩衝區大小。
如果省略 size (或 0),則會傳回目前的傳送緩衝區大小;否則,會使用 size 設定新的傳送緩衝區大小。
此函數適用於 Unix 上的 TCP、管道和 UDP 控制代碼,以及 Windows 上的 TCP 和 UDP 控制代碼。
傳回值
integerfail (如果 sizenil0)
0fail (如果 size 不是 nil 且不是 0)
注意:Linux 將設定兩倍的大小並傳回設定值原始大小的兩倍。
uv.recv_buffer_size({handle} [, {size}]) uv.recv_buffer_size()
> 方法形式 handle:recv_buffer_size([size])
參數
handleuv_handle_t 子類型的 userdata
sizeintegernil (預設值:0)
取得或設定作業系統用於通訊端的接收緩衝區大小。
如果省略 size (或 0),則會傳回目前的傳送緩衝區大小;否則,會使用 size 設定新的傳送緩衝區大小。
此函數適用於 Unix 上的 TCP、管道和 UDP 控制代碼,以及 Windows 上的 TCP 和 UDP 控制代碼。
傳回值
integerfail (如果 sizenil0)
0fail (如果 size 不是 nil 且不是 0)
注意:Linux 將設定兩倍的大小並傳回設定值原始大小的兩倍。
uv.fileno({handle}) uv.fileno()
> 方法形式 handle:fileno()
參數
handleuv_handle_t 子類型的 userdata
取得平台相依的等效檔案描述元。
支援下列控制代碼:TCP、管道、TTY、UDP 和輪詢。傳遞任何其他控制代碼類型將會失敗並傳回 EINVAL
如果控制代碼尚未附加檔案描述元,或控制代碼本身已關閉,則此函數會傳回 EBADF
傳回值:integerfail
警告:使用此函數時請非常小心。libuv 假設它控制檔案描述元,因此對其進行任何變更都可能導致故障。
uv.handle_get_type({handle}) uv.handle_get_type()
> 方法形式 handle:get_type()
參數
handleuv_handle_t 子類型的 userdata
傳回指定 handle 的 struct 名稱(例如 uv_pipe_t"pipe")以及 handle 類型的 libuv 列舉整數 (uv_handle_type)。
傳回值:string, integer
libuv 事件迴圈(如果以預設模式執行)將會持續執行,直到沒有作用中且被參考的 handle 為止。使用者可以透過取消參考作用中的 handle 來強制迴圈提早結束,例如在呼叫 uv.timer_start() 之後呼叫 uv.unref()
handle 可以被參考或取消參考,參考計數方案不使用計數器,因此這兩個操作都是冪等的。
預設情況下,所有 handle 在作用中時都會被參考,請參閱 uv.is_active() 以取得關於何謂作用中更詳細的說明。

uv_timer_t — 定時器 handle luv-timer-handle uv_timer_t

> uv_handle_t 的函式也適用。
定時器 handle 用於排程在未來呼叫的回呼函式。
uv.new_timer() uv.new_timer()
建立並初始化一個新的 uv_timer_t。傳回包裝它的 Lua userdata。
傳回值:uv_timer_t userdatafail
-- Creating a simple setTimeout wrapper
local function setTimeout(timeout, callback)
  local timer = uv.new_timer()
  timer:start(timeout, 0, function ()
    timer:stop()
    timer:close()
    callback()
  end)
  return timer
end
-- Creating a simple setInterval wrapper
local function setInterval(interval, callback)
  local timer = uv.new_timer()
  timer:start(interval, interval, function ()
    callback()
  end)
  return timer
end
-- And clearInterval
local function clearInterval(timer)
  timer:stop()
  timer:close()
end
uv.timer_start({timer}, {timeout}, {repeat}, {callback}) uv.timer_start()
> 方法形式 timer:start(timeout, repeat, callback)
參數
timeruv_timer_t userdata
timeoutinteger
repeatinteger
callbackcallable
啟動定時器。timeoutrepeat 的單位為毫秒。
如果 timeout 為零,則回呼函式會在下一個事件迴圈迭代時觸發。如果 repeat 為非零值,則回呼函式會在 timeout 毫秒後第一次觸發,然後在 repeat 毫秒後重複觸發。
傳回值:0fail
uv.timer_stop({timer}) uv.timer_stop()
> 方法形式 timer:stop()
參數
timeruv_timer_t userdata
停止定時器,將不再呼叫回呼函式。
傳回值:0fail
uv.timer_again({timer}) uv.timer_again()
> 方法形式 timer:again()
參數
timeruv_timer_t userdata
停止定時器,如果它是重複的,則使用重複值作為逾時時間重新啟動它。如果定時器之前從未啟動過,則會引發 EINVAL
傳回值:0fail
uv.timer_set_repeat({timer}, {repeat}) uv.timer_set_repeat()
> 方法形式 timer:set_repeat(repeat)
參數
timeruv_timer_t userdata
repeatinteger
設定重複間隔值,單位為毫秒。定時器將會排程在指定的間隔執行,無論回呼函式的執行持續時間為何,並且在時間片溢出的情況下遵循正常的定時器語義。
例如,如果一個 50 毫秒重複定時器第一次執行了 17 毫秒,則會排程在 33 毫秒後再次執行。如果其他任務消耗的時間超過第一個定時器回呼函式之後的 33 毫秒,則回呼函式將會盡快執行。
傳回值:無。
uv.timer_get_repeat({timer}) uv.timer_get_repeat()
> 方法形式 timer:get_repeat()
參數
timeruv_timer_t userdata
取得定時器的重複值。
返回:integer
uv.timer_get_due_in({timer}) uv.timer_get_due_in()
> 方法形式 timer:get_due_in()
參數
timeruv_timer_t userdata
取得定時器到期值,如果已過期則傳回 0。時間是相對於 uv.now() 的。
返回:integer
注意: libuv 1.40.0 版本新增。

uv_prepare_t — 準備 handle luv-prepare-handle uv_prepare_t

> uv_handle_t 的函式也適用。
準備 handle 將會在每次迴圈迭代中執行指定的回呼函式一次,就在輪詢 I/O 之前。
local prepare = uv.new_prepare()
prepare:start(function()
  print("Before I/O polling")
end)
uv.new_prepare() uv.new_prepare()
建立並初始化一個新的 uv_prepare_t。傳回包裝它的 Lua userdata。
傳回值:uv_prepare_t userdata
uv.prepare_start({prepare}, {callback}) uv.prepare_start()
> 方法形式 prepare:start(callback)
參數
prepareuv_prepare_t userdata
callbackcallable
使用指定的回呼函式啟動 handle。
傳回值:0fail
uv.prepare_stop({prepare}) uv.prepare_stop()
> 方法形式 prepare:stop()
參數
prepareuv_prepare_t userdata
停止 handle,將不再呼叫回呼函式。
傳回值:0fail

uv_check_t — 檢查 handle luv-check-handle uv_check_t

> uv_handle_t 的函式也適用。
檢查 handle 將會在每次迴圈迭代中執行指定的回呼函式一次,就在輪詢 I/O 之後。
local check = uv.new_check()
check:start(function()
  print("After I/O polling")
end)
uv.new_check() uv.new_check()
建立並初始化一個新的 uv_check_t。傳回包裝它的 Lua userdata。
傳回值:uv_check_t userdata
uv.check_start({check}, {callback}) uv.check_start()
> 方法形式 check:start(callback)
參數
checkuv_check_t userdata
callbackcallable
使用指定的回呼函式啟動 handle。
傳回值:0fail
uv.check_stop({check}) uv.check_stop()
> 方法形式 check:stop()
參數
checkuv_check_t userdata
停止 handle,將不再呼叫回呼函式。
傳回值:0fail

uv_idle_t — 閒置 handle luv-idle-handle uv_idle_t

> uv_handle_t 的函式也適用。
閒置 handle 將會在每次迴圈迭代中執行指定的回呼函式一次,就在 uv_prepare_t handle 之前。
注意:與準備 handle 的顯著差異在於,當有作用中的閒置 handle 時,迴圈將會執行零逾時輪詢,而不是阻塞等待 I/O。
警告:儘管名稱如此,閒置 handle 會在每次迴圈迭代時呼叫它們的回呼函式,而不是在迴圈實際上「閒置」時。
local idle = uv.new_idle()
idle:start(function()
  print("Before I/O polling, no blocking")
end)
uv.new_idle() uv.new_idle()
建立並初始化一個新的 uv_idle_t。傳回包裝它的 Lua userdata。
傳回值:uv_idle_t userdata
uv.idle_start({idle}, {callback}) uv.idle_start()
> 方法形式 idle:start(callback)
參數
idleuv_idle_t userdata
callbackcallable
使用指定的回呼函式啟動 handle。
傳回值:0fail
uv.idle_stop({check}) uv.idle_stop()
> 方法形式 idle:stop()
參數
idleuv_idle_t userdata
停止 handle,將不再呼叫回呼函式。
傳回值:0fail

uv_async_t — 非同步 handle luv-async-handle uv_async_t

> uv_handle_t 的函式也適用。
非同步 handle 允許使用者「喚醒」事件迴圈,並讓回呼函式從另一個執行緒呼叫。
local async
async = uv.new_async(function()
  print("async operation ran")
  async:close()
end)
async:send()
uv.new_async({callback}) uv.new_async()
參數
callbackcallable
...:傳遞到/從 uv.async_send(async, ...) 傳遞的 threadargs
建立並初始化一個新的 uv_async_t。傳回包裝它的 Lua userdata。
傳回值:uv_async_t userdatafail
注意:與其他 handle 初始化函式不同,這會立即啟動 handle。
uv.async_send({async}, {...}) uv.async_send()
> 方法形式 async:send(...)
參數
asyncuv_async_t userdata
...threadargs
喚醒事件迴圈並呼叫非同步 handle 的回呼函式。
傳回值:0fail
注意:從任何執行緒呼叫此函式都是安全的。回呼函式將會在迴圈執行緒上呼叫。
警告:libuv 將會合併對 uv.async_send(async) 的呼叫,也就是說,並非每次對它的呼叫都會產生回呼函式的執行。例如:如果回呼函式被呼叫之前,uv.async_send() 被連續呼叫 5 次,則回呼函式只會被呼叫一次。如果回呼函式被呼叫後再次呼叫 uv.async_send(),則它將會再次被呼叫。

uv_poll_t — 輪詢 handle luv-poll-handle uv_poll_t

> uv_handle_t 的函式也適用。
輪詢 handle 用於監看檔案描述符的可讀性和可寫性,類似於 poll(2) 的目的 (https://linux.die.net/man/2/poll)。
輪詢 handle 的目的是為了能夠整合依賴事件迴圈來通知其關於 socket 狀態變更的外部程式庫,例如 c-ares 或 libssh2。不建議將 uv_poll_t 用於任何其他目的;uv_tcp_tuv_udp_t 等提供了比 uv_poll_t 更快且更具擴展性的實作,尤其是在 Windows 上。
輪詢 handle 有時可能會發出檔案描述符可讀或可寫的訊號,即使它不是。因此,當使用者嘗試從 fd 讀取或寫入 fd 時,應始終準備好處理 EAGAIN 或等效錯誤。
對於同一個 socket,有多個作用中的輪詢 handle 是不允許的,這可能會導致 libuv 忙碌迴圈或發生其他故障。
使用者不應在檔案描述符被作用中的輪詢 handle 輪詢時關閉它。這可能會導致 handle 回報錯誤,但也可能會開始輪詢另一個 socket。但是,在呼叫 uv.poll_stop()uv.close() 後,可以安全地立即關閉 fd。
注意:在 Windows 上,只能使用輪詢 handle 輪詢 socket。在 Unix 上,可以使用 poll(2) 接受的任何檔案描述符。
uv.new_poll({fd}) uv.new_poll()
參數
fdinteger
使用檔案描述符初始化 handle。
檔案描述符設定為非阻塞模式。
傳回值:uv_poll_t userdatafail
uv.new_socket_poll({fd}) uv.new_socket_poll()
參數
fdinteger
使用 socket 描述符初始化 handle。在 Unix 上,這與 uv.new_poll() 相同。在 Windows 上,它會取得一個 SOCKET handle。
socket 設定為非阻塞模式。
傳回值:uv_poll_t userdatafail
uv.poll_start({poll}, {events}, {callback}) uv.poll_start()
> 方法形式 poll:start(events, callback)
參數
poll: uv_poll_t userdata
events: stringnil (預設值: "rw")
callbackcallable
err: nilstring
events: stringnil
開始輪詢檔案描述符。events 可以是:"r""w""rw""d""rd""wd""rwd""p""rp""wp""rwp""dp""rdp""wdp""rwdp",其中 r 代表 READABLE(可讀取)、w 代表 WRITABLE(可寫入)、d 代表 DISCONNECT(斷線),而 p 代表 PRIORITIZED(優先)。一旦偵測到事件,將會呼叫回呼函式,並將狀態設定為 0,且將偵測到的事件設定在 events 欄位。
使用者在 handle 啟用期間不應關閉 socket。如果使用者這麼做了,可能會呼叫回呼函式並回報錯誤狀態,但不保證一定會如此。
傳回值:0fail
注意:在已經啟用的 handle 上呼叫 uv.poll_start() 是可以的。這麼做會更新正在監看的事件遮罩。
uv.poll_stop({poll}) uv.poll_stop()
> 方法形式 poll:stop()
參數
poll: uv_poll_t userdata
停止輪詢檔案描述符,將不再呼叫回呼函式。
傳回值:0fail

uv_signal_t — 信號處理 luv-signal-handle uv_signal_t

> uv_handle_t 的函式也適用。
信號處理會在每個事件迴圈的基礎上實作 Unix 風格的信號處理。
Windows 注意事項:
在 Windows 上模擬接收某些信號
當使用者按下 CTRL+C 時,通常會傳遞 SIGINT。然而,如同在 Unix 上一樣,當啟用終端機原始模式時,不會產生此信號。
當使用者按下 CTRL + BREAK 時,會傳遞 SIGBREAK。
當使用者關閉主控台視窗時,會產生 SIGHUP。在 SIGHUP 時,程式會有大約 10 秒的時間執行清理。在那之後,Windows 會無條件終止程式。
每當 libuv 偵測到主控台已調整大小時,就會引發 SIGWINCH。當程式使用 uv_tty_t handle 寫入主控台時,libuv 會模擬 SIGWINCH。SIGWINCH 可能無法總是及時傳遞;libuv 只會在移動游標時偵測到大小變更。當可讀取的 uv_tty_t handle 在原始模式中使用時,調整主控台緩衝區大小也會觸發 SIGWINCH 信號。
可以成功建立其他信號的監看器,但永遠不會接收到這些信號。這些信號是:SIGILL、SIGABRT、SIGFPE、SIGSEGV、SIGTERM 和 SIGKILL。
呼叫 raise() 或 abort() 來以程式方式引發信號不會被 libuv 偵測到;這些不會觸發信號監看器。
Unix 注意事項:
SIGKILL 和 SIGSTOP 無法捕捉。
透過 libuv 處理 SIGBUS、SIGFPE、SIGILL 或 SIGSEGV 會導致未定義的行為。
如果透過 abort()(例如透過 assert())產生 SIGABRT,libuv 將不會捕捉到。
在 Linux 上,NPTL pthreads 函式庫使用 SIGRT0 和 SIGRT1(信號 32 和 33)來管理執行緒。為這些信號安裝監看器將會導致無法預測的行為,強烈建議不要這麼做。未來版本的 libuv 可能會直接拒絕這些信號。
-- Create a new signal handler
local signal = uv.new_signal()
-- Define a handler function
uv.signal_start(signal, "sigint", function(signal)
  print("got " .. signal .. ", shutting down")
  os.exit(1)
end)
uv.new_signal() uv.new_signal()
建立並初始化新的 uv_signal_t。傳回封裝它的 Lua userdata。
傳回值:uv_signal_t userdatafail
uv.signal_start({signal}, {signum}, {callback}) uv.signal_start()
> 方法形式 signal:start(signum, callback)
參數
signal: uv_signal_t userdata
signum: integerstring
callbackcallable
signum: string
使用給定的回呼函式啟動 handle,監看給定的信號。
傳回值:0fail uv.signal_start_oneshot()
uv.signal_start_oneshot({signal}, {signum}, {callback})
> 方法形式 signal:start_oneshot(signum, callback)
參數
signal: uv_signal_t userdata
signum: integerstring
callbackcallable
signum: string
uv.signal_start() 功能相同,但會在收到信號時立即重設信號處理常式。
傳回值:0fail
uv.signal_stop({signal}) uv.signal_stop()
> 方法形式 signal:stop()
參數
signal: uv_signal_t userdata
停止 handle,將不再呼叫回呼函式。
傳回值:0fail

uv_process_t — 程序處理 luv-process-handle uv_process_t

> uv_handle_t 的函式也適用。
程序 handle 會產生新的程序,並允許使用者控制它,並使用串流與其建立通訊通道。
uv.disable_stdio_inheritance() uv.disable_stdio_inheritance()
停用此程序從其父程序繼承的檔案描述符/handle 的繼承。其效果是此程序產生的子程序不會意外地繼承這些 handle。
建議盡可能在程式的早期呼叫此函式,在繼承的檔案描述符可以關閉或複製之前。
傳回值:無。
注意事項:此函式會盡力而為:無法保證 libuv 可以發現所有繼承的檔案描述符。一般來說,它在 Windows 上比在 Unix 上做得更好。
uv.spawn({path}, {options}, {on_exit}) uv.spawn()
參數
path: string
options: table (請參閱下方)
on_exit: callable
code: integer
signal: integer
初始化程序 handle 並啟動程序。如果成功產生程序,此函式將傳回子程序的 handle 和 pid。
產生失敗的可能原因包括(但不限於)要執行的檔案不存在、沒有使用指定的 setuid 或 setgid 的權限,或沒有足夠的記憶體來配置給新程序。
local stdin = uv.new_pipe()
local stdout = uv.new_pipe()
local stderr = uv.new_pipe()
print("stdin", stdin)
print("stdout", stdout)
print("stderr", stderr)
local handle, pid = uv.spawn("cat", {
  stdio = {stdin, stdout, stderr}
}, function(code, signal) -- on exit
  print("exit code", code)
  print("exit signal", signal)
end)
print("process opened", handle, pid)
uv.read_start(stdout, function(err, data)
  assert(not err, err)
  if data then
    print("stdout chunk", stdout, data)
  else
    print("stdout end", stdout)
  end
end)
uv.read_start(stderr, function(err, data)
  assert(not err, err)
  if data then
    print("stderr chunk", stderr, data)
  else
    print("stderr end", stderr)
  end
end)
uv.write(stdin, "Hello World")
uv.shutdown(stdin, function()
  print("stdin shutdown", stdin)
  uv.close(handle, function()
    print("process closed", handle, pid)
  end)
end)
uv.spawn-options
options table 接受下列欄位
options.args - 以字串列表形式表示的命令列引數。第一個字串不應是要執行的程式路徑,因為該路徑已透過 path 提供。在 Windows 上,這會使用 CreateProcess,它會將引數串連成一個字串。這可能會導致一些奇怪的錯誤(請參閱下文的 options.verbatim,針對 Windows)。
options.stdio - 設定將提供給子程序的檔案描述符。慣例是第一個條目是 stdin、stdout 和 stderr。(注意:在 Windows 上,只有在子程序使用 MSVCRT 執行階段時,子程序才能使用第三個之後的檔案描述符。)
options.env - 設定新程序的環境變數。
options.cwd - 設定子程序的目前工作目錄。
options.uid - 設定子程序的使用者 ID。
options.gid - 設定子程序的群組 ID。
options.verbatim - 如果為 true,則在將引數列表轉換為命令列字串時,不要將任何引數放在引號中,或執行任何其他跳脫。此選項僅在 Windows 系統上有意義。在 Unix 上,會直接忽略它。
options.detached - 如果為 true,則以分離狀態產生子程序 - 這會使其成為程序群組領導者,並有效地讓子程序在父程序結束後繼續執行。請注意,除非父程序在子程序的程序 handle 上呼叫 uv.unref(),否則子程序仍會保持父程序的事件迴圈活動。
options.hide - 如果為 true,則隱藏通常會建立的子程序主控台視窗。此選項僅在 Windows 系統上有意義。在 Unix 上,會直接忽略它。
options.stdio 條目可以有多種形式。
如果它們是數字,則子程序會從父程序繼承該相同的以零起始的 fd。
如果傳入 uv_stream_t handle,則這些 handle 會用作讀寫管道或繼承的串流,具體取決於串流是否有有效的 fd。
包括 nil 佔位符表示忽略子程序中的該 fd。
當子程序結束時,會使用結束代碼和信號呼叫 on_exit
傳回值:uv_process_t userdatainteger
uv.process_kill({process}, {signum}) uv.process_kill()
> 方法形式 process:kill(signum)
參數
process: uv_process_t userdata
signum: integerstringnil (預設值: sigterm)
將指定的信號傳送到指定的程序 handle。請查看 uv_signal_t 上的文件以瞭解信號支援,特別是在 Windows 上。
傳回值:0fail
uv.kill({pid}, {signum}) uv.kill()
參數
pid: integer
signum: integerstringnil (預設值: sigterm)
將指定的信號傳送到指定的 PID。請查看 uv_signal_t 上的文件以瞭解信號支援,特別是在 Windows 上。
傳回值:0fail
uv.process_get_pid({process}) uv.process_get_pid()
> 方法形式 process:get_pid()
參數
process: uv_process_t userdata
傳回 handle 的 pid。
返回:integer

uv_stream_t — 串流 handle luv-stream-handle uv_stream_t

> uv_handle_t 的函式也適用。
串流 handle 提供雙工通訊通道的抽象化。uv_stream_t 是一個抽象類型,libuv 提供 3 個串流實作,形式為 uv_tcp_tuv_pipe_tuv_tty_t
uv.shutdown({stream} [, {callback}]) uv.shutdown()
> 方法形式 stream:shutdown([callback])
參數
stream: uv_stream_t 子類型的 userdata
callbackcallablenil
err: nilstring
關閉雙工串流的輸出(寫入)端。它會等待擱置的寫入請求完成。在關閉完成後會呼叫回呼函式。
傳回值:uv_shutdown_t userdatafail
uv.listen({stream}, {backlog}, {callback}) uv.listen()
> 方法形式 stream:listen(backlog, callback)
參數
stream: uv_stream_t 子類型的 userdata
backlog: integer
callbackcallable
err: nilstring
開始接聽連入的連線。backlog 指示核心可能會佇列的連線數量,與 listen(2) 相同。當收到新的連入連線時,會呼叫回呼函式。
傳回值:0fail
uv.accept({stream}, {client_stream}) uv.accept()
> 方法形式 stream:accept(client_stream)
參數
stream: uv_stream_t 子類型的 userdata
client_stream: uv_stream_t 子類型的 userdata
此呼叫與 uv.listen() 結合使用,以接受連入連線。在收到回呼以接受連線後,請呼叫此函式。
當呼叫連線回呼函式時,保證此函式會在第一次成功完成。如果您嘗試多次使用它,則可能會失敗。建議每個連線呼叫只呼叫此函式一次。
傳回值:0fail
server:listen(128, function (err)
  local client = uv.new_tcp()
  server:accept(client)
end)
uv.read_start({stream}, {callback}) uv.read_start()
> 方法形式 stream:read_start(callback)
參數
stream: uv_stream_t 子類型的 userdata
callbackcallable
err: nilstring
data: stringnil
從連入的串流讀取資料。將多次呼叫回呼函式,直到沒有更多資料要讀取或呼叫 uv.read_stop() 為止。當我們達到 EOF 時,data 將會是 nil
傳回值:0fail
stream:read_start(function (err, chunk)
  if err then
    -- handle read error
  elseif chunk then
    -- handle data
  else
    -- handle disconnect
  end
end)
uv.read_stop({stream}) uv.read_stop()
> 方法形式 stream:read_stop()
參數
stream: uv_stream_t 子類型的 userdata
停止從串流讀取資料。將不再呼叫讀取回呼函式。
此函式為等冪運算,在已停止的串流上安全呼叫。
傳回值:0fail
uv.write({stream}, {data} [, {callback}]) uv.write()
> 方法形式 stream:write(data, [callback])
參數
stream: uv_stream_t 子類型的 userdata
data: buffer
callbackcallablenil
err: nilstring
將資料寫入串流。
data 可以是 Lua 字串或字串表格。如果傳入表格,C 後端會使用 writev 在單個系統呼叫中傳送所有字串。
可選的 callback 用於得知寫入何時完成。
傳回值:uv_write_t userdatafail
uv.write2({stream}, {data}, {send_handle} [, {callback}]) uv.write2()
> 方法形式 stream:write2(data, send_handle, [callback])
參數
stream: uv_stream_t 子類型的 userdata
data: buffer
send_handle: uv_stream_t 子類型的 userdata
callbackcallablenil
err: nilstring
用於透過管道傳送 handle 的擴充寫入函式。必須使用 ipc 選項 true 初始化管道。
傳回值:uv_write_t userdatafail
注意:send_handle 必須是 TCP socket 或管道,其為伺服器或連線(監聽或已連線狀態)。繫結的 socket 或管道將被視為伺服器。
uv.try_write({stream}, {data}) uv.try_write()
> 方法形式 stream:try_write(data)
參數
stream: uv_stream_t 子類型的 userdata
data: buffer
uv.write() 相同,但如果無法立即完成,則不會將寫入請求加入佇列。
將傳回寫入的位元組數(可能小於提供的緩衝區大小)。
傳回值:integerfail
uv.try_write2({stream}, {data}, {send_handle}) uv.try_write2()
> 方法形式 stream:try_write2(data, send_handle)
參數
stream: uv_stream_t 子類型的 userdata
data: buffer
send_handle: uv_stream_t 子類型的 userdata
uv.write2() 類似,但具有 uv.try_write() 的特性。在 Windows 上不受支援,會傳回 UV_EAGAIN
將傳回寫入的位元組數(可能小於提供的緩衝區大小)。
傳回值:integerfail
uv.is_readable({stream}) uv.is_readable()
> 方法形式 stream:is_readable()
參數
stream: uv_stream_t 子類型的 userdata
如果串流可讀取,則傳回 true,否則傳回 false
傳回值:boolean
uv.is_writable({stream}) uv.is_writable()
> 方法形式 stream:is_writable()
參數
stream: uv_stream_t 子類型的 userdata
如果串流可寫入,則傳回 true,否則傳回 false
傳回值:boolean
uv.stream_set_blocking({stream}, {blocking}) uv.stream_set_blocking()
> 方法形式 stream:set_blocking(blocking)
參數
stream: uv_stream_t 子類型的 userdata
blocking: boolean
啟用或停用串流的阻擋模式。
當啟用阻擋模式時,所有寫入都會同步完成。否則介面保持不變,例如,作業的完成或失敗仍將透過非同步建立的回呼函式回報。
傳回值:0fail
警告: 不建議過度依賴此 API。它未來可能會發生重大變更。目前僅適用於 Windows 和 uv_pipe_t 控制代碼。此外,當在提交寫入請求後變更阻擋模式時,libuv 目前不保證順序。因此,建議在開啟或建立串流後立即設定阻擋模式。
uv.stream_get_write_queue_size() uv.stream_get_write_queue_size()
> 方法形式 stream:get_write_queue_size()
傳回串流的寫入佇列大小。
返回:integer

uv_tcp_t — TCP 控制代碼 luv-tcp-handle uv_tcp_t

> 也適用 uv_handle_tuv_stream_t 函式。
TCP 控制代碼用於表示 TCP 串流和伺服器。
uv.new_tcp([{flags}]) uv.new_tcp()
參數
flags: stringnil
建立並初始化新的 uv_tcp_t。傳回包裝它的 Lua userdata。Flags 可以是 family 字串:"unix""inet""inet6""ipx""netlink""x25""ax25""atmpvc""appletalk""packet"
傳回值:uv_tcp_t userdatafail
uv.tcp_open({tcp}, {sock}) uv.tcp_open()
> 方法形式 tcp:open(sock)
參數
tcp: uv_tcp_t userdata
sock: integer
開啟現有的檔案描述符或 SOCKET 作為 TCP 控制代碼。
傳回值:0fail
注意: 不會檢查傳入的檔案描述符或 SOCKET 的類型,但要求它代表有效的串流 socket。
uv.tcp_nodelay({tcp}, {enable}) uv.tcp_nodelay()
> 方法形式 tcp:nodelay(enable)
參數
tcp: uv_tcp_t userdata
enable: boolean
啟用/停用 Nagle 演算法。
傳回值:0fail
uv.tcp_keepalive({tcp}, {enable} [, {delay}]) uv.tcp_keepalive()
> 方法形式 tcp:keepalive(enable, [delay])
參數
tcp: uv_tcp_t userdata
enable: boolean
delay: integernil
啟用/停用 TCP keep-alive。delay 是以秒為單位的初始延遲,當 enable 為 false 時會忽略。
傳回值:0fail
uv.tcp_simultaneous_accepts({tcp}, {enable}) uv.tcp_simultaneous_accepts()
> 方法形式 tcp:simultaneous_accepts(enable)
參數
tcp: uv_tcp_t userdata
enable: boolean
啟用/停用當監聽新的 TCP 連線時,作業系統排入佇列的同步非同步接受請求。
此設定用於調整 TCP 伺服器以達到所需的效能。擁有同步接受可以顯著提高接受連線的速率(這就是為什麼預設啟用它的原因),但可能會導致多程序設定中的負載分佈不均。
傳回值:0fail
uv.tcp_bind({tcp}, {host}, {port} [, {flags}]) uv.tcp_bind()
> 方法形式 tcp:bind(host, port, [flags])
參數
tcp: uv_tcp_t userdata
host: string
port: integer
flags: tablenil
ipv6only: boolean
將控制代碼繫結到主機和埠。host 應該是 IP 位址,而不是網域名稱。任何 flags 都會使用欄位 ipv6only 等於 truefalse 的表格設定。
當埠已被佔用時,您可能會從 uv.tcp_bind()uv.listen()uv.tcp_connect() 看到 EADDRINUSE 錯誤。也就是說,成功呼叫此函式並不保證呼叫 uv.listen()uv.tcp_connect() 也會成功。
使用埠 0 可讓作業系統指派臨時埠。您稍後可以使用 uv.tcp_getsockname() 查詢。
傳回值:0fail
uv.tcp_getpeername({tcp}) uv.tcp_getpeername()
> 方法形式 tcp:getpeername()
參數
tcp: uv_tcp_t userdata
取得連線至控制代碼的對等端位址。
傳回值:tablefail
ip : string
family : string
port : integer
uv.tcp_getsockname({tcp}) uv.tcp_getsockname()
> 方法形式 tcp:getsockname()
參數
tcp: uv_tcp_t userdata
取得控制代碼繫結的目前位址。
傳回值:tablefail
ip : string
family : string
port : integer
uv.tcp_connect({tcp}, {host}, {port}, {callback}) uv.tcp_connect()
> 方法形式 tcp:connect(host, port, callback)
參數
tcp: uv_tcp_t userdata
host: string
port: integer
callbackcallable
err: nilstring
建立 IPv4 或 IPv6 TCP 連線。
傳回值:uv_connect_t userdatafail
local client = uv.new_tcp()
client:connect("127.0.0.1", 8080, function (err)
  -- check error and carry on.
end)
uv.tcp_write_queue_size({tcp}) uv.tcp_write_queue_size()
> 方法形式 tcp:write_queue_size()
已棄用: 請改用 uv.stream_get_write_queue_size()
uv.tcp_close_reset([{callback}]) uv.tcp_close_reset()
> 方法形式 tcp:close_reset([callback])
參數
tcp: uv_tcp_t userdata
callbackcallablenil
透過傳送 RST 封包來重設 TCP 連線。這是透過將 SO_LINGER socket 選項設定為零的 linger 間隔,然後呼叫 uv.close() 來完成。由於某些平台不一致,不允許混合 uv.shutdown()uv.tcp_close_reset() 呼叫。
傳回值:0fail uv.socketpair()
uv.socketpair([{socktype}, [{protocol}, [{flags1}, [{flags2}]]]])
參數
socktype: stringintegernil (預設值:stream)
protocol: stringintegernil (預設值:0)
flags1: tablenil
nonblock: boolean (預設值:false)
flags2: tablenil
nonblock: boolean (預設值:false)
建立一對具有指定屬性的已連線 socket。產生的控制代碼可以傳遞給 uv.tcp_open(),與 uv.spawn() 一起使用,或用於任何其他目的。
當指定為字串時,socktype 必須是 "stream""dgram""raw""rdm""seqpacket" 其中之一。
protocol 設定為 0 或 nil 時,將根據 socket 的網域和類型自動選擇。當 protocol 指定為字串時,它會使用 getprotobyname(3) 函式查詢(範例:"ip""icmp""tcp""udp" 等)。
Flags
nonblock:開啟指定的 socket 控制代碼,以用於 OVERLAPPEDFIONBIO/`O_NONBLOCK` I/O 用途。建議用於 libuv 將使用的控制代碼,一般情況下不建議使用。
等同於網域為 AF_UNIXsocketpair(2)
傳回值:tablefail
[1, 2] : integer (檔案描述符)
-- Simple read/write with tcp
local fds = uv.socketpair(nil, nil, {nonblock=true}, {nonblock=true})
local sock1 = uv.new_tcp()
sock1:open(fds[1])
local sock2 = uv.new_tcp()
sock2:open(fds[2])
sock1:write("hello")
sock2:read_start(function(err, chunk)
  assert(not err, err)
  print(chunk)
end)

uv_pipe_t — 管道控制代碼 luv-pipe-handle uv_pipe_t

> 也適用 uv_handle_tuv_stream_t 函式。
管道控制代碼提供 Unix 上本機網域 socket 和 Windows 上具名管道的抽象。
local pipe = uv.new_pipe(false)
pipe:bind('/tmp/sock.test')
pipe:listen(128, function()
  local client = uv.new_pipe(false)
  pipe:accept(client)
  client:write("hello!\n")
  client:close()
end)
uv.new_pipe([{ipc}]) uv.new_pipe()
參數
ipc: booleannil (預設值: false)
建立並初始化一個新的 uv_pipe_t。返回 Lua userdata 包裝的結果。ipc 參數是一個布林值,用於指示此管道是否將用於程序之間的句柄傳遞。
返回值: uv_pipe_t userdatafail
uv.pipe_open({pipe}, {fd}) uv.pipe_open()
> 方法形式 pipe:open(fd)
參數
pipe: uv_pipe_t userdata
fdinteger
將現有的文件描述符或 uv_handle_t 作為管道開啟。
傳回值:0fail
注意: 文件描述符設定為非阻塞模式。
uv.pipe_bind({pipe}, {name}) uv.pipe_bind()
> 方法形式 pipe:bind(name)
參數
pipe: uv_pipe_t userdata
name: string
將管道綁定到文件路徑 (Unix) 或名稱 (Windows)。
傳回值:0fail
注意: Unix 上的路徑會被截斷為 sizeof(sockaddr_un.sun_path) 個字節,通常在 92 到 108 個字節之間。
uv.pipe_connect({pipe}, {name} [, {callback}]) uv.pipe_connect()
> 方法形式 pipe:connect(name, [callback])
參數
pipe: uv_pipe_t userdata
name: string
callbackcallablenil
err: nilstring
連接到 Unix 域套接字或具名管道。
傳回值:uv_connect_t userdatafail
注意: Unix 上的路徑會被截斷為 sizeof(sockaddr_un.sun_path) 個字節,通常在 92 到 108 個字節之間。
uv.pipe_getsockname({pipe}) uv.pipe_getsockname()
> 方法形式 pipe:getsockname()
參數
pipe: uv_pipe_t userdata
獲取 Unix 域套接字或具名管道的名稱。
返回值: stringfail
uv.pipe_getpeername({pipe}) uv.pipe_getpeername()
> 方法形式 pipe:getpeername()
參數
pipe: uv_pipe_t userdata
獲取 Unix 域套接字或此句柄所連接的具名管道的名稱。
返回值: stringfail
uv.pipe_pending_instances({pipe}, {count}) uv.pipe_pending_instances()
> 方法形式 pipe:pending_instances(count)
參數
pipe: uv_pipe_t userdata
count: integer
當管道伺服器正在等待連接時,設定待處理的管道實例句柄數量。
傳回值:無。
注意: 此設定僅適用於 Windows。
uv.pipe_pending_count({pipe}) uv.pipe_pending_count()
> 方法形式 pipe:pending_count()
參數
pipe: uv_pipe_t userdata
返回具名管道的待處理管道計數。
返回:integer
uv.pipe_pending_type({pipe}) uv.pipe_pending_type()
> 方法形式 pipe:pending_type()
參數
pipe: uv_pipe_t userdata
用於透過 IPC 管道接收句柄。
首先 - 呼叫 uv.pipe_pending_count(),如果結果 > 0,則初始化一個給定類型的句柄,由 uv.pipe_pending_type() 返回,並呼叫 uv.accept(pipe, handle)
返回:string
uv.pipe_chmod({pipe}, {flags}) uv.pipe_chmod()
> 方法形式 pipe:chmod(flags)
參數
pipe: uv_pipe_t userdata
flags: string
變更管道的權限,允許由不同使用者執行的程序存取。使管道可由所有使用者寫入或讀取。flags 為:"r""w""rw""wr",其中 rREADABLEwWRITABLE。此函數為阻塞式的。
傳回值:0fail
uv.pipe({read_flags}, {write_flags}) uv.pipe()
參數
read_flags: tablenil
nonblock: boolean (預設值:false)
write_flags: tablenil
nonblock: boolean (預設值:false)
建立一對連接的管道句柄。可以將數據寫入 write 文件描述符,並從 read 文件描述符讀取。產生的句柄可以傳遞給 pipe_open,與 spawn 一起使用,或用於任何其他目的。
Flags
nonblock:開啟指定的 socket 控制代碼,以用於 OVERLAPPEDFIONBIO/`O_NONBLOCK` I/O 用途。建議用於 libuv 將使用的控制代碼,一般情況下不建議使用。
等同於使用 O_CLOEXEC 標誌設定的 pipe(2)
傳回值:tablefail
read : integer (文件描述符)
write : integer (文件描述符)
-- Simple read/write with pipe_open
local fds = uv.pipe({nonblock=true}, {nonblock=true})
local read_pipe = uv.new_pipe()
read_pipe:open(fds.read)
local write_pipe = uv.new_pipe()
write_pipe:open(fds.write)
write_pipe:write("hello")
read_pipe:read_start(function(err, chunk)
  assert(not err, err)
  print(chunk)
end)
uv.pipe_bind2({pipe}, {name}, {flags}) uv.pipe_bind2()
> 方法形式 pipe:pipe_bind(name, flags)
參數
pipe: uv_pipe_t userdata
name: string
flags: integertablenil (預設值: 0)
Flags
如果 type(flags)number,則必須為 0uv.constants.PIPE_NO_TRUNCATE
如果 type(flags)table,則必須為 {}{ no_truncate = true|false }
如果 type(flags)nil,則使用預設值 0
對於不受支援的標誌,返回 EINVAL 而不執行綁定。
將管道綁定到文件路徑 (Unix) 或名稱 (Windows)。
支援 Linux 抽象命名空間套接字。namelen 必須包含前導 '\0' 字節,但不包含尾隨的 null 字節。
傳回值:0fail
注意: 1. Unix 上的路徑會被截斷為 sizeof(sockaddr_un.sun_path) 個字節,通常在 92 到 108 個字節之間。 2. 1.46.0 版本中新增。
uv.pipe_connect2(pipe, name, [flags], [callback]) uv.pipe_connect2()
> 方法形式 pipe:connect2(name, [flags], [callback])
參數
pipe: uv_pipe_t userdata
name: string
flags: integertablenil (預設值: 0)
callbackcallablenil
err: nilstring
Flags:
如果 type(flags)number,則必須為 0uv.constants.PIPE_NO_TRUNCATE
如果 type(flags)table,則必須為 {}{ no_truncate = true|false }
如果 type(flags)nil,則使用預設值 0
對於不受支援的標誌,返回 EINVAL 而不執行綁定操作。
連接到 Unix 域套接字或具名管道。
支援 Linux 抽象命名空間套接字。namelen 必須包含前導 null 字節,但不包含尾隨的 null 字節。
傳回值:uv_connect_t userdatafail
注意: 1. Unix 上的路徑會被截斷為 sizeof(sockaddr_un.sun_path) 個字節,通常在 92 到 108 個字節之間。 2. 1.46.0 版本中新增。

uv_tty_t — TTY 句柄 luv-tty-handle uv_tty_t

> 也適用 uv_handle_tuv_stream_t 函式。
TTY 句柄代表控制台的串流。
-- Simple echo program
local stdin = uv.new_tty(0, true)
local stdout = uv.new_tty(1, false)
stdin:read_start(function (err, data)
  assert(not err, err)
  if data then
    stdout:write(data)
  else
    stdin:close()
    stdout:close()
  end
end)
uv.new_tty({fd}, {readable}) uv.new_tty()
參數
fdinteger
readable: boolean
使用給定的文件描述符初始化一個新的 TTY 串流。通常文件描述符將為
0 - stdin
1 - stdout
2 - stderr
在 Unix 上,此函數將使用 ttyname_r(3) 確定終端機文件描述符的路徑,開啟它,如果傳遞的文件描述符指向 TTY,則使用它。這可讓 libuv 將 tty 設定為非阻塞模式,而不會影響其他共享 tty 的程序。
在不支援 ioctl TIOCGPTN 或 TIOCPTYGNAME 的系統上,此函數不是線程安全的,例如 OpenBSD 和 Solaris。
返回值: uv_tty_t userdatafail
注意: 如果重新開啟 TTY 失敗,libuv 會回退到阻塞式寫入。
uv.tty_set_mode({tty}, {mode}) uv.tty_set_mode()
> 方法形式 tty:set_mode(mode)
參數
tty: uv_tty_t userdata
mode: integer
使用指定的終端機模式設定 TTY。
參數 mode 是一個 C 枚舉,具有以下值
0 - UV_TTY_MODE_NORMAL:初始/正常終端機模式
1 - UV_TTY_MODE_RAW:原始輸入模式 (在 Windows 上,也會啟用 ENABLE_WINDOW_INPUT)
2 - UV_TTY_MODE_IO:用於 IPC 的二進位安全 I/O 模式 (僅限 Unix)
傳回值:0fail
uv.tty_reset_mode() uv.tty_reset_mode()
在程序退出時呼叫。將 TTY 設定重置為預設值,以便下一個程序接管。
在 Unix 平台上,此函數是異步信號安全的,但如果當執行在 uv.tty_set_mode() 內部時呼叫,則可能會失敗並顯示錯誤代碼 EBUSY
傳回值:0fail
uv.tty_get_winsize({tty}) uv.tty_get_winsize()
> 方法形式 tty:get_winsize()
參數
tty: uv_tty_t userdata
取得目前的視窗寬度和高度。
返回值: integer, integerfail
uv.tty_set_vterm_state({state}) uv.tty_set_vterm_state()
參數
state: string
控制是否由 libuv 或控制台處理控制台虛擬終端機序列。特別適用於啟用 ConEmu 對 ANSI X3.64 和 Xterm 256 色的支援。否則,Windows 10 控制台通常會自動偵測。狀態應為以下其中之一:"supported""unsupported"
此函數僅在 Windows 系統上有意義。在 Unix 上,會靜默忽略。
返回值: 無
uv.tty_get_vterm_state() uv.tty_get_vterm_state()
取得目前的狀態,即控制台虛擬終端機序列是否由 libuv 或控制台處理。返回值為 "supported""unsupported"
此函數未在 Unix 上實作,在 Unix 上會返回 ENOTSUP
返回值: stringfail

uv_udp_t — UDP 句柄 luv-udp-handle uv_udp_t

> uv_handle_t 的函式也適用。
UDP 句柄封裝了客戶端和伺服器的 UDP 通訊。
uv.new_udp([{flags}]) uv.new_udp()
參數
flags: tablenil
family: stringnil
mmsgs: integernil (預設值: 1)
建立並初始化一個新的 uv_udp_t。返回 Lua userdata 包裝的結果。實際的套接字是延遲建立的。
如果指定,family 必須是 "unix""inet""inet6""ipx""netlink""x25""ax25""atmpvc""appletalk""packet" 其中之一。
如果指定,mmsgs 將決定透過 recvmmsg(2) 一次能夠接收的訊息數量 (分配的緩衝區大小將能夠容納指定的最大大小資料報數量)。僅在支援 recvmmsg(2) 的平台上生效。
注意: 為了向後相容性,flags 也可以是字串或整數。當它是字串時,會像上面的 family 鍵一樣處理。當它是整數時,在呼叫 uv_udp_init_ex 時會直接用作 flags 參數。
返回值: uv_udp_t userdatafail
uv.udp_get_send_queue_size() uv.udp_get_send_queue_size()
> 方法形式 udp:get_send_queue_size()
返回句柄的發送佇列大小。
返回:integer
uv.udp_get_send_queue_count() uv.udp_get_send_queue_count()
> 方法形式 udp:get_send_queue_count()
返回句柄的發送佇列計數。
返回:integer
uv.udp_open({udp}, {fd}) uv.udp_open()
> 方法形式 udp:open(fd)
參數
udp: uv_udp_t userdata
fdinteger
將現有的文件描述符或 Windows SOCKET 作為 UDP 句柄開啟。
僅限 Unix: `sock` 參數的唯一要求是它必須符合資料包合約(在非連線模式下工作,支援 sendmsg()/recvmsg() 等)。換句話說,其他資料包類型的 socket,例如原始 socket 或 netlink socket,也可以傳遞給此函式。
檔案描述符設定為非阻塞模式。
注意: 傳遞的檔案描述符或 SOCKET 不會檢查其類型,但必須確保它代表有效的資料包 socket。
傳回值:0fail
uv.udp_bind({udp}, {host}, {port} [, {flags}]) uv.udp_bind()
> 方法形式 udp:bind(host, port, [flags])
參數
udp: uv_udp_t userdata
host: string
portnumber
flags: tablenil
ipv6only: boolean
reuseaddrboolean
將 UDP 控制代碼綁定到 IP 位址和端口。任何 flags 都會透過包含 reuseaddripv6only 欄位的表格設定為 truefalse
傳回值:0fail
uv.udp_getsockname({udp}) uv.udp_getsockname()
> 方法形式 udp:getsockname()
參數
udp: uv_udp_t userdata
取得 UDP 控制代碼的本機 IP 和端口。
傳回值:tablefail
ip : string
family : string
port : integer
uv.udp_getpeername({udp}) uv.udp_getpeername()
> 方法形式 udp:getpeername()
參數
udp: uv_udp_t userdata
取得已連線 UDP 控制代碼的遠端 IP 和端口。
傳回值:tablefail
ip : string
family : string
port : integer
uv.udp_set_membership()
uv.udp_set_membership({udp}, {multicast_addr}, {interface_addr}, {membership})
> 方法形式 > udp:set_membership(multicast_addr, interface_addr, membership)
參數
udp: uv_udp_t userdata
multicast_addrstring
interface_addrstringnil
membershipstring
設定多點傳播位址的成員資格。 multicast_addr 是要設定成員資格的多點傳播位址。 interface_addr 是介面位址。 membership 可以是字串 "leave""join"
傳回值:0fail
uv.udp_set_source_membership()
uv.udp_set_source_membership({udp}, {multicast_addr}, {interface_addr}, {source_addr}, {membership})
> 方法形式 > udp:set_source_membership(multicast_addr, interface_addr, source_addr, membership)
參數
udp: uv_udp_t userdata
multicast_addrstring
interface_addrstringnil
source_addrstring
membershipstring
設定特定來源多點傳播群組的成員資格。 multicast_addr 是要設定成員資格的多點傳播位址。 interface_addr 是介面位址。 source_addr 是來源位址。 membership 可以是字串 "leave""join"
傳回值:0fail
uv.udp_set_multicast_loop({udp}, {on}) uv.udp_set_multicast_loop()
> 方法形式 udp:set_multicast_loop(on)
參數
udp: uv_udp_t userdata
onboolean
設定 IP 多點傳播迴路旗標。使多點傳播封包迴送到本機 socket。
傳回值:0fail
uv.udp_set_multicast_ttl({udp}, {ttl}) uv.udp_set_multicast_ttl()
> 方法形式 udp:set_multicast_ttl(ttl)
參數
udp: uv_udp_t userdata
ttlinteger
設定多點傳播的 TTL。
ttl 是一個介於 1 到 255 的整數。
傳回值:0fail
uv.udp_set_multicast_interface()
uv.udp_set_multicast_interface({udp}, {interface_addr})
> 方法形式 udp:set_multicast_interface(interface_addr)
參數
udp: uv_udp_t userdata
interface_addrstring
設定多點傳播介面以傳送或接收資料。
傳回值:0fail
uv.udp_set_broadcast({udp}, {on}) uv.udp_set_broadcast()
> 方法形式 udp:set_broadcast(on)
參數
udp: uv_udp_t userdata
onboolean
開啟或關閉廣播。
傳回值:0fail
uv.udp_set_ttl({udp}, {ttl}) uv.udp_set_ttl()
> 方法形式 udp:set_ttl(ttl)
參數
udp: uv_udp_t userdata
ttlinteger
設定存活時間。
ttl 是一個介於 1 到 255 的整數。
傳回值:0fail
uv.udp_send({udp}, {data}, {host}, {port}, {callback}) uv.udp_send()
> 方法形式 udp:send(data, host, port, callback)
參數
udp: uv_udp_t userdata
data: buffer
host: string
port: integer
callbackcallable
err: nilstring
透過 UDP socket 傳送資料。如果 socket 之前沒有使用 uv.udp_bind() 綁定,它將會綁定到 0.0.0.0(「所有介面」的 IPv4 位址)和一個隨機的端口號碼。
傳回:uv_udp_send_t userdatafail
uv.udp_try_send({udp}, {data}, {host}, {port}) uv.udp_try_send()
> 方法形式 udp:try_send(data, host, port)
參數
udp: uv_udp_t userdata
data: buffer
host: string
port: integer
uv.udp_send() 相同,但如果無法立即完成,則不會將傳送請求排隊。
傳回值:integerfail
uv.udp_recv_start({udp}, {callback}) uv.udp_recv_start()
> 方法形式 udp:recv_start(callback)
參數
udp: uv_udp_t userdata
callbackcallable
err: nilstring
data: stringnil
addrtablenil
ipstring
port: integer
familystring
flagstable
partialbooleannil
mmsg_chunkbooleannil
準備接收資料。如果 socket 之前沒有使用 uv.udp_bind() 綁定,它將會綁定到 0.0.0.0(「所有介面」的 IPv4 位址)和一個隨機的端口號碼。
傳回值:0fail
uv.udp_recv_stop({udp}) uv.udp_recv_stop()
> 方法形式 udp:recv_stop()
參數
udp: uv_udp_t userdata
停止監聽傳入的資料包。
傳回值:0fail
uv.udp_connect({udp}, {host}, {port}) uv.udp_connect()
> 方法形式 udp:connect(host, port)
參數
udp: uv_udp_t userdata
host: string
port: integer
將 UDP 控制代碼關聯到遠端位址和端口,因此此控制代碼傳送的每個訊息都會自動傳送到該目的地。使用 NULL addr 呼叫此函式會斷開控制代碼的連線。嘗試在已連線的控制代碼上呼叫 uv.udp_connect() 將會產生 EISCONN 錯誤。嘗試斷開未連線的控制代碼將會傳回 ENOTCONN 錯誤。
傳回值:0fail

uv_fs_event_t — FS 事件控制代碼 luv-fs-event-handle uv_fs_event_t

> uv_handle_t 的函式也適用。
FS 事件控制代碼允許使用者監控給定路徑的變更,例如,如果檔案已重新命名或其中有一般變更。此控制代碼在每個平台上使用最適合此工作的後端。
uv.new_fs_event() uv.new_fs_event()
建立並初始化新的 uv_fs_event_t。傳回封裝它的 Lua userdata。
傳回:uv_fs_event_t userdatafail
uv.fs_event_start({fs_event}, {path}, {flags}, {callback}) uv.fs_event_start()
> 方法形式 fs_event:start(path, flags, callback)
參數
fs_eventuv_fs_event_t userdata
path: string
flagstable
watch_entrybooleannil(預設值:false
statbooleannil(預設值:false
recursivebooleannil(預設值:false
callbackcallable
err: nilstring
filenamestring
eventstable
changebooleannil
renamebooleannil
使用給定的回呼函式啟動控制代碼,它將監看指定路徑的變更。
傳回值:0fail
uv.fs_event_stop() uv.fs_event_stop()
> 方法形式 fs_event:stop()
停止 handle,將不再呼叫回呼函式。
傳回值:0fail
uv.fs_event_getpath() uv.fs_event_getpath()
> 方法形式 fs_event:getpath()
取得控制代碼正在監控的路徑。
返回值: stringfail

uv_fs_poll_t — FS 輪詢控制代碼 luv-fs-poll-handle uv_fs_poll_t

> uv_handle_t 的函式也適用。
FS 輪詢控制代碼允許使用者監控給定路徑的變更。與 uv_fs_event_t 不同,fs 輪詢控制代碼使用 stat 來偵測檔案何時變更,因此它們可以在 fs 事件控制代碼無法使用的檔案系統上工作。
uv.new_fs_poll() uv.new_fs_poll()
建立並初始化新的 uv_fs_poll_t。傳回封裝它的 Lua userdata。
傳回:uv_fs_poll_t userdatafail
uv.fs_poll_start({fs_poll}, {path}, {interval}, {callback}) uv.fs_poll_start()
> 方法形式 fs_poll:start(path, interval, callback)
參數
fs_polluv_fs_poll_t userdata
path: string
intervalinteger
callbackcallable
err: nilstring
prevtablenil (請參閱 uv.fs_stat)
currtablenil (請參閱 uv.fs_stat)
每隔 interval 毫秒檢查 path 上的檔案是否變更。
注意: 為了達到最大的可攜性,請使用多秒的時間間隔。次秒的時間間隔將無法在許多檔案系統上偵測到所有變更。
傳回值:0fail
uv.fs_poll_stop() uv.fs_poll_stop()
> 方法形式 fs_poll:stop()
停止 handle,將不再呼叫回呼函式。
傳回值:0fail
uv.fs_poll_getpath() uv.fs_poll_getpath()
> 方法形式 fs_poll:getpath()
取得控制代碼正在監控的路徑。
返回值: stringfail
大多數檔案系統函式可以同步或非同步運作。當呼叫同步版本(省略回呼函式)時,函式會立即傳回 FS 呼叫的結果。當呼叫非同步版本(提供回呼函式)時,函式會立即傳回 uv_fs_t userdata 並非同步執行其回呼函式;如果遇到錯誤,傳遞給回呼函式的第一個也是唯一的引數將會是 err 錯誤字串;如果操作成功完成,第一個引數將會是 nil,而其餘引數將會是 FS 呼叫的結果。
下面實作了 readFile 的同步和非同步版本(使用簡單的錯誤處理)作為範例
local function readFileSync(path)
  local fd = assert(uv.fs_open(path, "r", 438))
  local stat = assert(uv.fs_fstat(fd))
  local data = assert(uv.fs_read(fd, stat.size, 0))
  assert(uv.fs_close(fd))
  return data
end
local data = readFileSync("main.lua")
print("synchronous read", data)
local function readFile(path, callback)
  uv.fs_open(path, "r", 438, function(err, fd)
    assert(not err, err)
    uv.fs_fstat(fd, function(err, stat)
      assert(not err, err)
      uv.fs_read(fd, stat.size, 0, function(err, data)
        assert(not err, err)
        uv.fs_close(fd, function(err)
          assert(not err, err)
          return callback(data)
        end)
      end)
    end)
  end)
end
readFile("main.lua", function(data)
  print("asynchronous read", data)
end)
uv.fs_close({fd} [, {callback}]) uv.fs_close()
參數
fdinteger
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
close(2) 等效。
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_open({path}, {flags}, {mode} [, {callback}]) uv.fs_open()
參數
path: string
flags: stringinteger
mode: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
fd: integernil
等同於 open(2)。存取 flags 可以是整數,或是下列字串之一: "r""rs""sr""r+""rs+""sr+""w""wx""xw""w+""wx+""xw+""a""ax""xa""a+""ax+" 或 "`xa+`"。
回傳值(同步版本):integerfail
回傳值(非同步版本):uv_fs_t userdata
注意:在 Windows 上,libuv 使用 CreateFileW,因此檔案總是會以二進位模式開啟。因此,不支援 O_BINARYO_TEXT 旗標。
uv.fs_read({fd}, {size} [, {offset} [, {callback}]]) uv.fs_read()
參數
fdinteger
size: integer
offset: integernil
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
data: stringnil
等同於 preadv(2)。回傳任何資料。空字串表示 EOF。
如果 offset 為 nil 或省略,則預設為 -1,表示「使用並更新目前的檔案偏移量」。
注意:offset >= 0 時,讀取操作不會更新目前的檔案偏移量。
回傳值(同步版本):stringfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_unlink({path} [, {callback}]) uv.fs_unlink()
參數
path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 unlink(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_write({fd}, {data} [, {offset} [, {callback}]]) uv.fs_write()
參數
fdinteger
data: buffer
offset: integernil
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
bytes: integernil
等同於 pwritev(2)。回傳寫入的位元組數。
如果 offset 為 nil 或省略,則預設為 -1,表示「使用並更新目前的檔案偏移量」。
注意:offset >= 0 時,寫入操作不會更新目前的檔案偏移量。
回傳值(同步版本):integerfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_mkdir({path}, {mode} [, {callback}]) uv.fs_mkdir()
參數
path: string
mode: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 mkdir(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_mkdtemp({template} [, {callback}]) uv.fs_mkdtemp()
參數
template: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
path: stringnil
等同於 mkdtemp(3)
回傳值(同步版本):stringfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_mkstemp({template} [, {callback}]) uv.fs_mkstemp()
參數
template: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
fd: integernil
path: stringnil
等同於 mkstemp(3)。回傳一個暫存檔案控制代碼和檔名。
回傳值(同步版本):integer, stringfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_rmdir({path} [, {callback}]) uv.fs_rmdir()
參數
path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 rmdir(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_scandir({path} [, {callback}]) uv.fs_scandir()
參數
path: string
callbackcallable
err: nilstring
success: uv_fs_t userdatanil
等同於 scandir(3),但 API 略有不同。回傳一個控制代碼,使用者可以將其傳遞給 uv.fs_scandir_next()
注意:此函式可以同步或非同步使用。無論是否提供回呼函式,請求的使用者資料都會同步回傳,並且如果提供了回呼函式,則會將相同的使用者資料傳遞給回呼函式。
回傳值:uv_fs_t userdatafail
uv.fs_scandir_next({fs}) uv.fs_scandir_next()
參數
fs: uv_fs_t userdata
uv_fs_t 上呼叫,由 uv.fs_scandir() 回傳,以取得下一個目錄條目資料,作為 name, type 對。當沒有更多條目時,會回傳 nil
注意:此函式只有同步版本。請參閱 uv.fs_opendir() 及其相關函式以取得非同步版本。
回傳值:string, stringnilfail
uv.fs_stat({path} [, {callback}]) uv.fs_stat()
參數
path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
stat: tablenil (請參閱下方)
等同於 stat(2)
回傳值(同步版本):tablefail
dev : integer
mode : integer
nlink : integer
uid : integer
gid : integer
rdev : integer
ino : integer
size : integer
blksize : integer
blocks : integer
flags : integer
gen : integer
atime : table
sec : integer
nsec : integer
mtime : table
sec : integer
nsec : integer
ctime : table
sec : integer
nsec : integer
birthtime : table
sec : integer
nsec : integer
type : string
回傳值(非同步版本):uv_fs_t userdata
uv.fs_fstat({fd} [, {callback}]) uv.fs_fstat()
參數
fdinteger
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
stat: tablenil (請參閱 uv.fs_stat)
等同於 fstat(2)
回傳值(同步版本):tablefail (請參閱 uv.fs_stat)
回傳值(非同步版本):uv_fs_t userdata
uv.fs_lstat({path} [, {callback}]) uv.fs_lstat()
參數
path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
stat: tablenil (請參閱 uv.fs_stat)
等同於 lstat(2)
回傳值(同步版本):tablefail (請參閱 uv.fs_stat())
回傳值(非同步版本):uv_fs_t userdata
uv.fs_rename({path}, {new_path} [, {callback}]) uv.fs_rename()
參數
path: string
new_path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 rename(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_fsync({fd} [, {callback}]) uv.fs_fsync()
參數
fdinteger
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 fsync(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_fdatasync({fd} [, {callback}]) uv.fs_fdatasync()
參數
fdinteger
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 fdatasync(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_ftruncate({fd}, {offset} [, {callback}]) uv.fs_ftruncate()
參數
fdinteger
offset: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 ftruncate(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_sendfile()
uv.fs_sendfile({out_fd}, {in_fd}, {in_offset}, {size} [, {callback}])
參數
out_fd: integer
in_fd: integer
in_offset: integer
size: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
bytes: integernil
等同於 sendfile(2) 的限制版本。回傳寫入的位元組數。
回傳值(同步版本):integerfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_access({path}, {mode} [, {callback}]) uv.fs_access()
參數
path: string
mode: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
permission: booleannil
在 Unix 上等同於 access(2)。Windows 使用 GetFileAttributesW()。存取 mode 可以是整數,或是一個包含 "R""W""X" 的字串。回傳 truefalse,表示存取權限。
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_chmod({path}, {mode} [, {callback}]) uv.fs_chmod()
參數
path: string
mode: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 chmod(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_fchmod({fd}, {mode} [, {callback}]) uv.fs_fchmod()
參數
fdinteger
mode: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 fchmod(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_utime({path}, {atime}, {mtime} [, {callback}]) uv.fs_utime()
參數
path: string
atime: number
mtime: number
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 utime(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_futime({fd}, {atime}, {mtime} [, {callback}]) uv.fs_futime()
參數
fdinteger
atime: number
mtime: number
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 futime(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_lutime({path}, {atime}, {mtime} [, {callback}]) uv.fs_lutime()
參數
path: string
atime: number
mtime: number
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 lutime(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_link({path}, {new_path} [, {callback}]) uv.fs_link()
參數
path: string
new_path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 link(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_symlink({path}, {new_path} [, {flags} [, {callback}]]) uv.fs_symlink()
參數
path: string
new_path: string
flags: tableintegernil
dir: boolean
junction: boolean
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 symlink(2)。如果省略 flags 參數,則第三個參數會被視為 callback
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_readlink({path} [, {callback}]) uv.fs_readlink()
參數
path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
path: stringnil
等同於 readlink(2)
回傳值(同步版本):stringfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_realpath({path} [, {callback}]) uv.fs_realpath()
參數
path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
path: stringnil
等同於 realpath(3)
回傳值(同步版本):stringfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_chown({path}, {uid}, {gid} [, {callback}]) uv.fs_chown()
參數
path: string
uid: integer
gid: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 chown(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_fchown({fd}, {uid}, {gid} [, {callback}]) uv.fs_fchown()
參數
fdinteger
uid: integer
gid: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 fchown(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_lchown({fd}, {uid}, {gid} [, {callback}]) uv.fs_lchown()
參數
fdinteger
uid: integer
gid: integer
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
等同於 lchown(2)
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_copyfile({path}, {new_path} [, {flags} [, {callback}]]) uv.fs_copyfile()
參數
path: string
new_path: string
flags: tableintegernil
excl: boolean
ficlone: boolean
ficlone_force: boolean
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
將檔案從 path 複製到 new_path。如果省略 flags 參數,則第三個參數會被視為 callback
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_opendir({path} [, {callback} [, {entries}]]) uv.fs_opendir()
參數
path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
dir: luv_dir_t userdatanil
entries: integernil
以目錄串流開啟 path。回傳一個控制代碼,使用者可以將其傳遞給 uv.fs_readdir()entries 參數定義每次呼叫 uv.fs_readdir() 時應回傳的最大條目數。
回傳值(同步版本):luv_dir_t userdatafail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_readdir({dir} [, {callback}]) uv.fs_readdir()
> 方法形式 dir:readdir([callback])
參數
dir: luv_dir_t userdata
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
entries: tablenil (請參閱下方)
迭代由成功呼叫 uv.fs_opendir() 所回傳的目錄串流 luv_dir_t。回傳一個資料表,其中包含資料表的數量,其中條目數 n 等於或小於在相關聯的 uv.fs_opendir() 呼叫中使用的 entries 參數。
回傳值(同步版本):tablefail
[1, 2, 3, ..., n] : table
name : string
type : string
回傳值(非同步版本):uv_fs_t userdata
uv.fs_closedir({dir} [, {callback}]) uv.fs_closedir()
> 方法形式 dir:closedir([callback])
參數
dir: luv_dir_t userdata
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
successbooleannil
關閉由成功呼叫 uv.fs_opendir() 所回傳的目錄串流。
傳回(同步版本):booleanfail
回傳值(非同步版本):uv_fs_t userdata
uv.fs_statfs({path} [, {callback}]) uv.fs_statfs()
參數
path: string
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
tablenil (請參閱下方)
等同於 statfs(2)
回傳值:tablenil
type : integer
bsize : integer
blocks : integer
bfree : integer
bavail整數
files整數
ffree整數

執行緒池工作排程 luv-thread-pool-work-scheduling

Libuv 提供了一個執行緒池,可用於執行使用者程式碼並在迴圈執行緒中接收通知。這個執行緒池在內部用於執行所有檔案系統操作,以及 getaddrinfogetnameinfo 請求。
local function work_callback(a, b)
  return a + b
end
local function after_work_callback(c)
  print("The result is: " .. c)
end
local work = uv.new_work(work_callback, after_work_callback)
work:queue(1, 2)
-- output: "The result is: 3"
uv.new_work({work_callback}, {after_work_callback}) uv.new_work()
參數
work_callback函式字串
...:傳遞給/從 uv.queue_work(work_ctx, ...)threadargs
after_work_callback函式
...:從 work_callback 返回的 threadargs
建立並初始化新的 luv_work_ctx_t(而非 uv_work_t)。work_callback 是一個 Lua 函式,或是一個包含 Lua 程式碼或從函式傾印的位元組碼的字串。返回包裝它的 Lua userdata。
返回:luv_work_ctx_t userdata
uv.queue_work({work_ctx}, {...}) uv.queue_work()
> 方法形式 work_ctx:queue(...)
參數
work_ctxluv_work_ctx_t userdata
...threadargs
將一個工作請求放入佇列,該請求將在執行緒池中的一個新 Lua 狀態中執行 work_callback,並帶有 ... 中的任何其他引數。從 work_callback 返回的值將傳遞給 after_work_callback,該函式將在主迴圈執行緒中呼叫。
傳回值:booleanfail

DNS 工具函式 luv-dns-utility-functions

uv.getaddrinfo({host}, {service} [, {hints} [, {callback}]]) uv.getaddrinfo()
參數
host字串nil
service字串nil
hints表格nil
family字串整數nil
socktype字串整數nil
protocol字串整數nil
addrconfig布林值nil
v4mapped布林值nil
all布林值nil
numerichost布林值nil
passive布林值nil
numericserv布林值nil
canonname布林值nil
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
addresses表格nil (請參閱下方)
等同於 getaddrinfo(3)nodeservice 其中之一可以是 nil,但不能同時為 nil
接受字串的鍵的有效提示字串
family"unix""inet""inet6""ipx""netlink""x25""ax25""atmpvc""appletalk""packet"
socktype"stream""dgram""raw""rdm""seqpacket"
protocol:將使用 getprotobyname(3) 函式查詢(範例:"ip""icmp""tcp""udp" 等)
回傳值(同步版本):tablefail
[1, 2, 3, ..., n] : table
addr字串
family : string
port整數nil
socktype字串
protocol字串
canonname字串nil
返回(非同步版本):uv_getaddrinfo_t userdatafail
uv.getnameinfo({address} [, {callback}]) uv.getnameinfo()
參數
address表格
ip字串nil
port整數nil
family字串整數nil
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
host字串nil
service字串nil
等同於 getnameinfo(3)
如果指定,family 必須是 "unix""inet""inet6""ipx""netlink""x25""ax25""atmpvc""appletalk""packet" 其中之一。
返回(同步版本):字串, 字串fail
返回(非同步版本):uv_getnameinfo_t userdatafail
Libuv 為多個執行緒和同步基本元素提供了跨平台的實作。API 主要遵循 pthreads API。
uv.new_thread([{options}, ] {entry}, {...}) uv.new_thread()
參數
options表格nil
stack_size整數nil
entry函式字串
...:傳遞給 entrythreadargs
建立並初始化 luv_thread_t(而非 uv_thread_t)。返回包裝它的 Lua userdata 並非同步執行 entry,它可以是一個 Lua 函式,或是一個包含 Lua 程式碼或從函式傾印的位元組碼的字串。其他引數 ... 會傳遞給 entry 函式,並且可以提供一個可選的 options 表格。目前接受的 option 欄位為 stack_size
返回:luv_thread_t userdatafail
注意:不安全,請確保執行緒的生命週期結束早於 Lua 狀態關閉。
uv.thread_equal({thread}, {other_thread}) uv.thread_equal()
> 方法形式 thread:equal(other_thread)
參數
threadluv_thread_t userdata
other_threadluv_thread_t userdata
返回一個布林值,指示兩個執行緒是否相同。此函式等同於 __eq 元方法。
返回:布林值 uv.thread_setaffinity()
uv.thread_setaffinity({thread}, {affinity} [, {get_old_affinity}])
> 方法形式 thread:setaffinity(affinity, [get_old_affinity])
參數
threadluv_thread_t userdata
affinity表格
[1, 2, 3, ..., n]布林值
get_old_affinity布林值
設定指定執行緒的親和性設定。
affinity 必須是一個表格,其中每個鍵都是 CPU 編號,而值是布林值,表示 thread 是否有資格在該 CPU 上執行。如果 affinity 表格的長度不等於或大於 uv.cpumask_size(),則從表格中遺失的任何 CPU 編號的親和性將設定為 false。如果需要設定超過 uv.cpumask_size() 個 CPU 的親和性,則 affinity 必須是一個沒有間隙的類陣列表格,因為如果 #affinity 大於 uv.cpumask_size(),則 #affinity 將用作 cpumask_size
如果 get_old_affinitytrue,則會返回 thread 的先前親和性設定。否則,成功呼叫後會返回 true
注意:在 Windows 上,執行緒親和性設定不是原子性的。macOS 不支援此功能。
返回:表格布林值fail
[1, 2, 3, ..., n]布林值
uv.thread_getaffinity({thread} [, {mask_size}]) uv.thread_getaffinity()
> 方法形式 thread:getaffinity([mask_size])
參數
threadluv_thread_t userdata
mask_size整數
取得指定執行緒的親和性設定。
如果提供 mask_size,則它必須大於或等於 uv.cpumask_size()。如果省略 mask_size 參數,則會使用 uv.cpumask_size() 的傳回值。返回一個類陣列表格,其中每個鍵對應一個 CPU 編號,而值是布林值,表示 thread 是否有資格在該 CPU 上執行。
注意:在 Windows 上,執行緒親和性取得不是原子性的。macOS 不支援此功能。
傳回值:tablefail
[1, 2, 3, ..., n]布林值
uv.thread_getcpu() uv.thread_getcpu()
取得呼叫執行緒正在執行的 CPU 編號。
注意:第一個 CPU 將以數字 1 而非 0 返回。這樣可以使數字與 uv.thread_getaffinityuv.thread_setaffinity 中使用的表格鍵對應。
傳回值:integerfail
uv.thread_setpriority({thread}, {priority}) uv.thread.setpriority()
> 方法形式 thread:setpriority(priority)
參數
threadluv_thread_t userdata
priority數字
設定指定執行緒的排程優先級設定。在某些平台上,需要提升的權限才能設定特定優先級。優先級可以設定為以下常數
uv.constants.THREAD_PRIORITY_HIGHEST
uv.constants.THREAD_PRIORITY_ABOVE_NORMAL
uv.constants.THREAD_PRIORITY_NORMAL
uv.constants.THREAD_PRIORITY_BELOW_NORMAL
uv.constants.THREAD_PRIORITY_LOWEST
傳回值:booleanfail
uv.thread_getpriority({thread}) uv.thread.getpriority()
> 方法形式 thread:getpriority()
參數
threadluv_thread_t userdata
取得執行緒的優先級設定。
擷取指定執行緒的排程優先級。返回的優先級值與平台有關。
對於 Linux,當排程原則為 SCHED_OTHER(預設)時,優先級為 0。
返回:數字fail
uv.thread_self() uv.thread_self()
返回呼叫此函式之執行緒的控制代碼。
返回:luv_thread_t
uv.thread_join({thread}) uv.thread_join()
> 方法形式 thread:join()
參數
threadluv_thread_t userdata
等待 thread 完成執行其進入函式。
傳回值:booleanfail
uv.sleep({msec}) uv.sleep()
參數
msec整數
暫停呼叫此函式之執行緒指定的毫秒數。
傳回值:無。
uv.exepath() uv.exepath()
返回可執行檔路徑。
返回值: stringfail
uv.cwd() uv.cwd()
返回目前的工作目錄。
返回值: stringfail
uv.chdir({cwd}) uv.chdir()
參數
cwd字串
使用字串 cwd 設定目前的工作目錄。
傳回值:0fail
uv.get_process_title() uv.get_process_title()
返回目前程序的標題。
返回值: stringfail
uv.set_process_title({title}) uv.set_process_title()
參數
title字串
使用字串 title 設定目前程序的標題。
傳回值:0fail
uv.get_total_memory() uv.get_total_memory()
返回以位元組為單位的目前系統記憶體總量。
返回:數字
uv.get_free_memory() uv.get_free_memory()
返回以位元組為單位的目前可用系統記憶體。
返回:數字
uv.get_constrained_memory() uv.get_constrained_memory()
根據作業系統施加的限制,取得程序可用的記憶體量(以位元組為單位)。如果沒有此類限制,或限制未知,則返回 0。請注意,此值小於或大於系統記憶體總量的情況並不少見。
返回:數字
uv.get_available_memory() uv.get_available_memory()
取得仍可供程序使用的可用記憶體量(以位元組為單位)。這與 uv.get_free_memory() 的不同之處在於,它會考慮作業系統施加的任何限制。如果沒有此類限制,或限制未知,則返回的量將與 uv.get_free_memory() 相同。
返回:數字
uv.resident_set_memory() uv.resident_set_memory()
返回目前程序的常駐集合大小 (RSS)。
傳回值:integerfail
uv.getrusage() uv.getrusage()
返回資源使用情況。
傳回值:tablefail
utime表格(使用的使用者 CPU 時間)
sec : integer
usec整數
stime : table (系統 CPU 時間使用量)
sec : integer
usec整數
maxrss : integer (最大常駐記憶體集合大小)
ixrss : integer (整體共享記憶體大小)
idrss : integer (整體非共享資料大小)
isrss : integer (整體非共享堆疊大小)
minflt : integer (頁面回收 (軟性頁面錯誤))
majflt : integer (頁面錯誤 (硬性頁面錯誤))
nswap : integer (交換)
inblock : integer (區塊輸入操作)
oublock : integer (區塊輸出操作)
msgsnd : integer (已傳送的 IPC 訊息)
msgrcv : integer (已接收的 IPC 訊息)
nsignals : integer (已接收的訊號)
nvcsw : integer (自願性上下文切換)
nivcsw : integer (非自願性上下文切換)
uv.available_parallelism() uv.available_parallelism()
返回程式應使用的預設平行處理量的估計值。永遠返回非零值。
在 Linux 上,會檢查呼叫執行緒的 CPU 親和性遮罩,以判斷它是否已固定到特定的 CPU。
在 Windows 上,具有超過 64 個邏輯 CPU 的系統上的可用平行處理量可能會被低估。
在其他平台上,會回報作業系統認為在線的 CPU 數量。
返回:integer
uv.cpu_info() uv.cpu_info()
以表格形式返回系統上 CPU 的資訊,每個找到的 CPU 都有一個表格。
傳回值:tablefail
[1, 2, 3, ..., n] : table
model : string
speed : number
times : table
user : number
nice : number
sys : number
idle : number
irq : number
uv.cpumask_size() uv.cpumask_size()
返回用於進程/執行緒親和性的遮罩最大大小,如果目前的平台不支援親和性,則返回 ENOTSUP
傳回值:integerfail
uv.getpid() uv.getpid()
已棄用: 請改用 uv.os_getpid()
uv.getuid() uv.getuid()
返回進程的使用者 ID。
返回:integer
注意: 這不是 libuv 函數,在 Windows 上不支援。
uv.getgid() uv.getgid()
返回進程的群組 ID。
返回:integer
注意: 這不是 libuv 函數,在 Windows 上不支援。
uv.setuid({id}) uv.setuid()
參數
id: integer
使用整數 id 設定進程的使用者 ID。
傳回值:無。
注意: 這不是 libuv 函數,在 Windows 上不支援。
uv.setgid({id}) uv.setgid()
參數
id: integer
使用整數 id 設定進程的群組 ID。
傳回值:無。
注意: 這不是 libuv 函數,在 Windows 上不支援。
uv.hrtime() uv.hrtime()
以奈秒為單位返回目前的高解析度時間,以數字表示。這是相對於過去任意時間而言。它與一天中的時間無關,因此不受時鐘漂移的影響。主要用途是測量間隔之間的時間。
返回:數字
uv.clock_gettime({clock_id}) uv.clock_gettime()
參數
clock_id: string
從高解析度即時或單調時鐘來源取得目前的系統時間。 clock_id 可以是字串 "monotonic""realtime"
即時時鐘從 UNIX 紀元 (1970-01-01) 開始計數,並會進行時間調整;它可能會跳回過去的時間。
單調時鐘從過去的任意點開始計數,永遠不會跳回過去的時間。
傳回值:tablefail
sec: integer
nsec: integer
uv.uptime() uv.uptime()
以秒為單位返回目前的系統運行時間。
返回:數字fail
uv.print_all_handles() uv.print_all_handles()
將與主迴圈相關聯的所有控制代碼列印到 stderr。格式為 [旗標] 控制代碼類型 控制代碼位址。旗標為 R 表示已參考,A 表示作用中,I 表示內部。
傳回值:無。
注意: 這在 Windows 上不可用。
警告: 此函數用於臨時除錯,沒有 API/ABI 穩定性保證。
uv.print_active_handles() uv.print_active_handles()
uv.print_all_handles() 相同,但只會列印作用中的控制代碼。
傳回值:無。
注意: 這在 Windows 上不可用。
警告: 此函數用於臨時除錯,沒有 API/ABI 穩定性保證。
uv.guess_handle({fd}) uv.guess_handle()
參數
fdinteger
用於偵測應將哪種串流類型與給定的檔案描述符 fd 一起使用。通常這會在初始化期間用於猜測 stdio 串流的類型。
返回:string
uv.gettimeofday() uv.gettimeofday()
gettimeofday(2) 的跨平台實作。以配對形式返回 unix 時間的秒數和微秒數。
返回值: integer, integerfail
uv.interface_addresses() uv.interface_addresses()
以表格形式返回系統上網路介面的位址資訊。每個表格索引鍵都是介面的名稱,而每個相關聯的值都是位址資訊的陣列,其中欄位為 ipfamilynetmaskinternalmac
返回: table
[名稱(s)] : table
ip : string
family : string
netmask : string
internal : boolean
mac : string
uv.if_indextoname({ifindex}) uv.if_indextoname()
參數
ifindex: integer
if_indextoname(3) 的支援 IPv6 實作。
返回值: stringfail
uv.if_indextoiid({ifindex}) uv.if_indextoiid()
參數
ifindex: integer
檢索適用於 IPv6 範圍位址的網路介面識別碼。在 Windows 上,以字串形式返回數字 ifindex。在所有其他平台上,會使用 uv.if_indextoname()
返回值: stringfail
uv.loadavg() uv.loadavg()
以三位一組的形式返回平均負載。在 Windows 上不支援。
返回: number, number, number
uv.os_uname() uv.os_uname()
返回系統資訊。
返回: table
sysname : string
release : string
version : string
machine : string
uv.os_gethostname() uv.os_gethostname()
返回主機名稱。
返回:string
uv.os_getenv({name} [, {size}]) uv.os_getenv()
參數
name: string
size: integer (預設 = LUAL_BUFFERSIZE)
以字串形式返回由 name 指定的環境變數。可以透過定義 size 來設定內部緩衝區大小。如果省略,則會使用 LUAL_BUFFERSIZE。如果環境變數超過內部緩衝區中可用的儲存空間,則會返回 ENOBUFS。如果沒有相符的環境變數存在,則會返回 ENOENT
返回值: stringfail
警告: 此函數不是執行緒安全的。
uv.os_setenv({name}, {value}) uv.os_setenv()
參數
name: string
value: string
使用字串 value 設定由 name 指定的環境變數。
傳回值:booleanfail
警告: 此函數不是執行緒安全的。
uv.os_unsetenv({name}) uv.os_unsetenv()
參數
name: string
取消設定由 name 指定的環境變數。
傳回值:booleanfail
警告: 此函數不是執行緒安全的。
uv.os_environ() uv.os_environ()
將所有環境變數以動態表格形式返回,其中名稱與其對應的值相關聯。
返回: table
警告: 此函數不是執行緒安全的。
uv.os_homedir() uv.os_homedir()
返回值: stringfail
警告: 此函數不是執行緒安全的。
uv.os_tmpdir() uv.os_tmpdir()
返回值: stringfail
警告: 此函數不是執行緒安全的。
uv.os_get_passwd() uv.os_get_passwd()
返回密碼檔案資訊。
返回: table
username : string
uid : integer
gid : integer
shell : string
homedir : string
uv.os_getpid() uv.os_getpid()
返回目前的進程 ID。
返回:數字
uv.os_getppid() uv.os_getppid()
返回父進程 ID。
返回:數字
uv.os_getpriority({pid}) uv.os_getpriority()
參數
pid: integer
返回由 pid 指定的進程的排程優先順序。
返回:數字fail
uv.os_setpriority({pid}, {priority}) uv.os_setpriority()
參數
pid: integer
priority: integer
設定由 pid 指定的進程的排程優先順序。priority 範圍介於 -20 (高優先順序) 和 19 (低優先順序) 之間。
傳回值:booleanfail
uv.random({len}, {flags} [, {callback}]) uv.random()
參數
len: integer
flags: nil (請參閱下方)
callbackcallable(非同步版本)或 nil(同步版本)
err: nilstring
bytes: stringnil
使用從系統 CSPRNG 取得的密碼編譯強度高的隨機位元組,填滿長度為 len 的字串。flags 保留供未來擴充使用,目前必須為 nil0{}
無法進行短讀取。當少於 len 個隨機位元組可用時,會返回非零錯誤值或傳遞至回呼。如果省略回呼,則此函數會同步完成。
當沒有足夠的熵可用時,同步版本可能會無限期地封鎖。當系統熵不足時,非同步版本可能永遠不會完成。
回傳值(同步版本):stringfail
返回 (非同步版本): 0fail
uv.translate_sys_error({errcode}) uv.translate_sys_error()
參數
errcode: integer
返回與給定的平台相依錯誤碼等效的 libuv 錯誤訊息和錯誤名稱 (皆為字串形式,請參閱 luv-error-handling 中的 errname):Unix 上的 POSIX 錯誤碼 (儲存在 errno 中的錯誤碼) 和 Windows 上的 Win32 錯誤碼 (由 GetLastError() 或 WSAGetLastError() 返回的錯誤碼)。
返回: string, stringnil
uv.metrics_idle_time() uv.metrics_idle_time()
擷取事件迴圈在核心的事件提供者(例如 epoll_wait)中閒置的時間量。此呼叫是執行緒安全的。
回傳值是從 uv_loop_t 被設定為收集閒置時間開始,核心事件提供者中累積的閒置時間。
注意:事件迴圈在呼叫 loop_configure 並帶有 "metrics_idle_time" 參數之前,不會開始累積事件提供者的閒置時間。
返回:數字
uv.metrics_info() uv.metrics_info()
從目前事件迴圈指標集合中取得指標表。建議在 prepare 回呼函數中擷取這些指標(請參閱 uv.new_prepare(), uv.prepare_start()),以確保指標計數器沒有不一致的問題。
返回: table
loop_count : integer
events : integer
events_waiting : integer

貢獻者 luv-credits

本文件是 LUV 文件重新格式化後的版本,與 luv 儲存庫的提交 dcd1a1c(2023 年 8 月 23 日)同步更新 https://github.com/luvit/luv/commit/dcd1a1cad5b05634a7691402d6ca2f214fb4ae76
基於 https://github.com/nanotee/luv-vimdocs 並獲得許可。
主頁
指令索引
快速參考