Luvref

Nvim の:help ページ。 生成されたもので、 ソースtree-sitter-vimdoc パーサーを使用して生成されています。


LUV リファレンスマニュアル
このファイルは、Nvim のイベントループに使用され、vim.uv を介して Lua からアクセスできる LibUV ライブラリの Lua バインディングについて説明しています(例: uv.version()vim.uv.version() として公開されています)。
このマニュアルに関する情報は、luv-credits を参照してください。
さらに詳しい例については、https://github.com/luvit/luv/tree/master/examples を参照してください。

はじめに luv luv-intro uv

luv (https://github.com/luvit/luv) プロジェクトは、マルチプラットフォーム対応ライブラリ libuv (https://github.com/libuv/libuv) への Lua コードからのアクセスを提供します。これは主に 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 ライブラリには、簡略化のために以降 uv と呼びます、単一の Lua モジュールが含まれています。このモジュールは、主に元の libuv バージョンに対応する名前の関数で構成されています。たとえば、libuv 関数 uv_tcp_bind には、uv.tcp_bind() に luv バージョンがあります。現在、非関数フィールドは uv.constantsuv.errno の2つのみ存在し、どちらもテーブルです。
関数とメソッド
単純な関数に加えて、luv はオプションのメソッドスタイルAPIを提供します。たとえば、uv.tcp_bind(server, host, port) は、server:bind(host, port) として呼び出すこともできます。最初の引数 server がオブジェクトになり、関数名から tcp_ が削除されることに注意してください。メソッド形式については、存在する場合は以下に記載されています。
同期関数と非同期関数
コールバックを受け取る関数は非同期です。これらの関数は、初期状態を示す結果を呼び出し元にすぐに返す場合がありますが、最終的な実行は、少なくとも次の libuv ループの反復まで延期されます。完了後、それらのコールバックは、渡された結果と共に実行されます。
コールバックを受け取らない関数は同期です。これらの関数は、結果を呼び出し元にすぐに返します。
一部(一般的に FS と DNS)の関数は、同期または非同期のどちらかの動作をすることができます。これらの関数にコールバックが提供されている場合、非同期に動作し、コールバックが提供されていない場合、同期に動作します。
疑似型
いくつかの固有の型が定義されています。これらは Lua の実際の型ではありませんが、ここでは一貫性のある動作を文書化するために使用されます。
fail: アサート可能な nil, string, string タプル (luv-error-handling を参照)
callable: function、または __call メタメソッドを持つ table または userdata
buffer: string または string のシーケンシャルな table
threadargs: nilbooleannumberstring、または userdata 型の可変引数 (...)。引数の数は 9 個に制限されています。
このドキュメントは、主に luv の Lua API のコンテキスト内で、libuv API ドキュメント (https://docs.libuv.org/en/v1.x/api.html) の言い換えです。Lua モジュールの動作に関連する場合を除き、低レベルの実装の詳細や公開されていない C 関数と型については、ここでは説明しません。
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: ヒントの値が無効です。
EAI_CANCELED: リクエストがキャンセルされました。
EAI_FAIL: 永続的なエラーです。
EAI_FAMILY: ai_family がサポートされていません。
EAI_MEMORY: メモリ不足です。
EAI_NODATA: アドレスがありません。
EAI_NONAME: ノードまたはサービスが不明です。
EAI_OVERFLOW: 引数のバッファがオーバーフローしました。
EAI_PROTOCOL: 解決されたプロトコルが不明です。
EAI_SERVICE: ソケットタイプに対してサービスが使用できません。
EAI_SOCKTYPE: ソケットタイプがサポートされていません。
EALREADY: 接続は既に進行中です。
EBADF: ファイル記述子が無効です。
EBUSY: リソースがビジー状態またはロックされています。
ECANCELED: 操作がキャンセルされました。
ECHARSET: 無効な Unicode 文字です。
ECONNABORTED: ソフトウェアによって接続が中断されました。
ECONNREFUSED: 接続が拒否されました。
ECONNRESET: ピアによって接続がリセットされました。
EDESTADDRREQ: 送信先アドレスが必要です。
EEXIST: ファイルは既に存在します。
EFAULT: システムコールの引数に無効なアドレスがあります。
EFBIG: ファイルが大きすぎます。
EHOSTUNREACH: ホストに到達できません。
EINTR: システムコールが中断されました。
EINVAL: 引数が無効です。
EIO: I/O エラーです。
EISCONN: ソケットは既に接続されています。
EISDIR: ディレクトリに対する操作が無効です。
ELOOP: シンボリックリンクが多すぎます。
EMFILE: 開いているファイルが多すぎます。
EMSGSIZE: メッセージが長すぎます。
ENAMETOOLONG: 名前が長すぎます。
ENETDOWN: ネットワークがダウンしています。
ENETUNREACH: ネットワークに到達できません。
ENFILE: ファイルテーブルのオーバーフローです。
ENOBUFS: 使用可能なバッファスペースがありません。
ENODEV: そのようなデバイスがありません。
ENOENT: そのようなファイルまたはディレクトリがありません。
ENOMEM: メモリが不足しています。
ENONET: マシンはネットワークに接続されていません。
ENOPROTOOPT: プロトコルを使用できません。
ENOSPC: デバイスに空きスペースがありません。
ENOSYS: 関数が実装されていません。
ENOTCONN: ソケットは接続されていません。
ENOTDIR: ディレクトリではありません。
ENOTEMPTY: ディレクトリが空ではありません。
ENOTSOCK: ソケット以外のオブジェクトに対するソケット操作です。
ENOTSUP: ソケットで操作がサポートされていません。
EOVERFLOW: 値が定義されたデータ型に対して大きすぎます。
EPERM: 操作が許可されていません。
EPIPE: パイプが壊れています。
EPROTO: プロトコルエラーです。
EPROTONOSUPPORT: プロトコルがサポートされていません。
EPROTOTYPE: ソケットのプロトコルタイプが間違っています。
ERANGE: 結果が大きすぎます。
EROFS: 読み取り専用のファイルシステムです。
ESHUTDOWN: トランスポートエンドポイントのシャットダウン後に送信できません。
ESPIPE: シークが無効です。
ESRCH: そのようなプロセスがありません。
ETIMEDOUT: 接続がタイムアウトしました。
ETXTBSY: テキストファイルがビジー状態です。
EXDEV: デバイスを跨ぐリンクは許可されていません。
UNKNOWN: 不明なエラーです。
EOF: ファイルの終わりです。
ENXIO: そのようなデバイスまたはアドレスがありません。
EMLINK: リンクが多すぎます。
ENOTTY: デバイスに不適切な ioctl です。
EFTYPE: 不適切なファイルタイプまたはフォーマットです。
EILSEQ: 無効なバイトシーケンス。
ESOCKTNOSUPPORT: サポートされていないソケットタイプ。

バージョンチェック luv-version-checking

uv.version() uv.version()
libuvのバージョンを1つの整数にパックして返します。各コンポーネントに8ビットが使用され、パッチ番号は下位8ビットに格納されます。たとえば、libuv 1.2.3では0x010203となります。
戻り値: 整数
uv.version_string() uv.version_string()
libuvのバージョン番号を文字列として返します。たとえば、libuv 1.2.3では"1.2.3"となります。リリース版ではないバージョンでは、バージョンサフィックスが含まれます。
戻り値: 文字列

uv_loop_t — イベントループ luv-event-loop uv_loop_t

イベントループはlibuvの機能の中心的な部分です。I/Oのポーリングと、さまざまなイベントソースに基づいて実行されるコールバックのスケジューリングを担当します。
luvでは、ライブラリを読み込むLua状態ごとに暗黙的なuvループがあります。各スレッドが対応する独自のuvループを持つ独自のLua状態を持つ限り、このライブラリをマルチスレッド環境で使用できます。このループはLuaモジュールではユーザーに直接公開されません。
uv.loop_close() uv.loop_close()
すべての内部ループリソースを閉じます。通常の状況では、ループはLuaによってガベージコレクションされると自動的に閉じられるため、loop_close()を明示的に呼び出す必要はありません。ループの実行が終了し、開いているハンドルとリクエストがすべて閉じられた後にのみこの関数を呼び出してください。そうでない場合はEBUSYを返します。
戻り値: 0 または 失敗
uv.run([{mode}]) uv.run()
パラメータ
mode: 文字列 または nil (デフォルト: "default")
この関数はイベントループを実行します。指定されたモードに応じて動作が異なります。
"default": アクティブで参照されているハンドルやリクエストがなくなるまでイベントループを実行します。uv.stop()が呼び出され、アクティブなハンドルまたはリクエストがまだ残っている場合はtrueを返します。それ以外の場合はfalseを返します。
"once": I/Oを1回ポーリングします。保留中のコールバックがない場合、この関数はブロックすることに注意してください。完了した場合(アクティブなハンドルまたはリクエストが残っていない場合)はfalseを返し、さらにコールバックが期待される場合(将来のある時点でイベントループを再度実行する必要があることを意味する)はtrueを返します。
"nowait": I/Oを1回ポーリングしますが、保留中のコールバックがない場合はブロックしません。完了した場合(アクティブなハンドルまたはリクエストが残っていない場合)はfalseを返し、さらにコールバックが期待される場合(将来のある時点でイベントループを再度実行する必要があることを意味する)はtrueを返します。
戻り値: ブール値 または 失敗
注記: Luvitはユーザーコードの読み込み後に暗黙的にuv.run()を呼び出しますが、luvバインディングを直接使用する場合、イベントループを開始するには、最初のイベントコールバックセットを登録した後にこれを呼び出す必要があります。
uv.loop_configure({option}, {...}) uv.loop_configure()
パラメータ
option: 文字列
...: optionに依存します。下記を参照してください。
追加のループオプションを設定します。特に断りのない限り、通常はuv_run()への最初の呼び出しの前にこれを実行する必要があります。
サポートされているオプション
"block_signal": 新しいイベントをポーリングするときにシグナルをブロックします。loop_configure()への第2引数は、シグナル名(小文字の文字列)またはシグナル番号です。この操作は現在、サンプリングプロファイラを使用する場合の不要なウェイクアップを抑制するために、"sigprof"シグナルに対してのみ実装されています。他のシグナルを要求すると、EINVALで失敗します。
"metrics_idle_time": イベントプロバイダでイベントループが費やすアイドル時間の量を累積します。このオプションはmetrics_idle_time()を使用するために必要です。
この関数への有効な呼び出しの例は次のとおりです。
uv.loop_configure("block_signal", "sigprof")
戻り値: 0 または 失敗
注記: ENOSYSエラーを処理する準備をしておいてください。これは、ループオプションがプラットフォームでサポートされていないことを意味します。
uv.loop_mode() uv.loop_mode()
ループが実行中の場合は、使用中のモードを示す文字列を返します。ループが実行されていない場合は、代わりにnilを返します。
戻り値: 文字列 または nil
uv.loop_alive() uv.loop_alive()
ループ内に参照されているアクティブなハンドル、アクティブなリクエスト、または閉じているハンドルがある場合はtrueを返し、それ以外の場合はfalseを返します。
戻り値: ブール値 または 失敗
uv.stop() uv.stop()
uv.run()をできるだけ早く終了させることで、イベントループを停止します。これは次のループ反復よりも早くは発生しません。この関数がI/Oをブロックする前に呼び出された場合、ループはこの反復でI/Oをブロックしません。
戻り値: なし。
uv.backend_fd() uv.backend_fd()
バックエンドファイルディスクリプタを取得します。kqueue、epoll、イベントポートのみがサポートされています。
これはuv.run("nowait")と組み合わせて使用して、1つのスレッドでポーリングし、別のスレッドでイベントループのコールバックを実行できます。
戻り値: 整数 または nil
注記: 別のkqueue pollsetにkqueue fdを埋め込むことは、すべてのプラットフォームで機能するわけではありません。fdを追加してもエラーではありませんが、イベントを生成することはありません。
uv.backend_timeout() uv.backend_timeout()
ポーリングタイムアウトを取得します。戻り値はミリ秒単位で、タイムアウトがない場合は-1です。
戻り値: 整数
uv.now() uv.now()
現在のタイムスタンプをミリ秒単位で返します。タイムスタンプはイベントループティックの開始時にキャッシュされます。詳細と理由はuv.update_time()を参照してください。
タイムスタンプは、ある任意の時点から単調増加します。開始点については仮定しないでください。がっかりするだけです。
戻り値: 整数
注記: ミリ秒以下の精度が必要な場合は、uv.hrtime()を使用してください。
uv.update_time() uv.update_time()
イベントループの「現在」の概念を更新します。Libuvは時間関連のシステムコールの数を減らすために、イベントループティックの開始時に現在の時間をキャッシュします。
イベントループを長時間ブロックするコールバックがある場合を除き、通常は、この関数を呼び出す必要はありません。「長時間」とはやや主観的ですが、おそらくミリ秒オーダー以上です。
戻り値: なし。
uv.walk({callback}) uv.walk()
パラメータ
callback: 呼び出し可能
handle: uv_handle_tのサブタイプのユーザーデータ
ハンドルのリストを走査します。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()
パラメータ
req: uv_req_tのサブタイプのユーザーデータ
保留中のリクエストをキャンセルします。リクエストが実行中であるか、実行が終了している場合は失敗します。uv_fs_tuv_getaddrinfo_tuv_getnameinfo_tuv_work_tリクエストのキャンセルのみが現在サポートされています。
戻り値: 0 または 失敗
uv.req_get_type({req}) uv.req_get_type()
> メソッド形式 req:get_type()
パラメータ
req: uv_req_tのサブタイプのユーザーデータ
指定されたリクエストの構造体の名前(例:uv_fs_tの場合は"fs")と、リクエストのタイプのlibuv列挙型整数(uv_req_type)を返します。
戻り値: 文字列、整数

uv_handle_t — 基本ハンドル luv-base-handle uv_handle_t

uv_handle_tは、すべてのlibuvハンドルタイプの基本タイプです。ここに定義されているすべてのAPI関数は、任意のハンドルタイプで機能します。
uv.is_active({handle}) uv.is_active()
> メソッド形式 handle:is_active()
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
ハンドルがアクティブな場合は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()などで呼び出しによって開始され、対応する停止関数で停止されるまでアクティブです。
戻り値: ブール値 または 失敗
uv.is_closing({handle}) uv.is_closing()
> メソッド形式 handle:is_closing()
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
ハンドルが閉じているか閉じている最中の場合はtrueを、それ以外の場合はfalseを返します。
戻り値: ブール値 または 失敗
注記: この関数は、ハンドルの初期化とクローズコールバックの到着の間でのみ使用してください。
uv.close({handle} [, {callback}]) uv.close()
> メソッド形式 handle:close([callback])
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
callback: 呼び出し可能 または nil
ハンドルのクローズを要求します。callbackはこの呼び出しの後、非同期的に呼び出されます。メモリが解放される前に、各ハンドルでこれを呼び出す必要があります。
ファイルディスクリプタをラップするハンドルはすぐに閉じられますが、callbackはそれでもイベントループの次の反復に延期されます。これにより、ハンドルに関連付けられているリソースを解放する機会が得られます。
uv_connect_tuv_write_tなどの進行中のリクエストはキャンセルされ、ECANCELEDで非同期的にコールバックが呼び出されます。
戻り値: なし。
uv.ref({handle}) uv.ref()
> メソッド形式 handle:ref()
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
指定されたハンドルを参照します。参照はべき等です。つまり、ハンドルが既に参照されている場合、この関数を再度呼び出しても効果はありません。
戻り値: なし。
luv-reference-countingを参照してください。
uv.unref({handle}) uv.unref()
> メソッド形式 handle:unref()
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
指定されたハンドルの参照を解除します。参照はべき等です。つまり、ハンドルが参照されていない場合、この関数を再度呼び出しても効果はありません。
戻り値: なし。
luv-reference-countingを参照してください。
uv.has_ref({handle}) uv.has_ref()
> メソッド形式 handle:has_ref()
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
ハンドルが参照されている場合はtrueを、参照されていない場合はfalseを返します。
戻り値: ブール値 または 失敗
luv-reference-countingを参照してください。
uv.send_buffer_size({handle} [, {size}]) uv.send_buffer_size()
> メソッド形式 handle:send_buffer_size([size])
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
size: 整数 または nil (デフォルト: 0)
オペレーティングシステムがソケットに使用する送信バッファのサイズを取得または設定します。
sizeが省略されている場合(または0の場合)、現在の送信バッファサイズを返します。それ以外の場合は、sizeを使用して新しい送信バッファサイズを設定します。
この関数は、UnixではTCP、パイプ、UDPハンドル、WindowsではTCPとUDPハンドルで機能します。
戻り値
整数 または 失敗 (sizenilまたは0の場合)
0 または 失敗 (sizenilではなく、0でもない場合)
注記: Linuxは元の設定値の2倍のサイズを設定し、2倍のサイズを返します。
uv.recv_buffer_size({handle} [, {size}]) uv.recv_buffer_size()
> メソッド形式 handle:recv_buffer_size([size])
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
size: 整数 または nil (デフォルト: 0)
ソケットに対してオペレーティングシステムが使用する受信バッファのサイズを取得または設定します。
sizeが省略されている場合(または0の場合)、現在の送信バッファサイズを返します。それ以外の場合は、sizeを使用して新しい送信バッファサイズを設定します。
この関数は、UnixではTCP、パイプ、UDPハンドル、WindowsではTCPとUDPハンドルで機能します。
戻り値
整数 または 失敗 (sizenilまたは0の場合)
0 または 失敗 (sizenilではなく、0でもない場合)
注記: Linuxは元の設定値の2倍のサイズを設定し、2倍のサイズを返します。
uv.fileno({handle}) uv.fileno()
> メソッド形式 handle:fileno()
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
プラットフォーム依存のファイルディスクリプタ相当を取得します。
以下のハンドルがサポートされています: TCP、パイプ、TTY、UDP、poll。それ以外のハンドル型を渡すと、EINVALエラーが発生します。
ハンドルにファイルディスクリプタがまだアタッチされていない場合、またはハンドル自体が閉じられている場合、この関数はEBADFを返します。
戻り値: 整数または失敗
警告: この関数を使用する際には十分に注意してください。libuvはファイルディスクリプタを制御していると想定しているため、変更を加えると誤動作につながる可能性があります。
uv.handle_get_type({handle}) uv.handle_get_type()
> メソッド形式 handle:get_type()
パラメータ
handle: uv_handle_tのサブタイプのユーザーデータ
指定されたハンドルの構造体の名前(例: uv_pipe_tの場合"pipe")と、ハンドルの型に対応するlibuvの列挙型整数(uv_handle_type)を返します。
戻り値: 文字列、整数

参照カウント luv-reference-counting

libuvイベントループ(デフォルトモードで実行されている場合)は、アクティブで参照されているハンドルがなくなるまで実行されます。ユーザーは、アクティブなハンドルの参照を解除することで、ループを早期に終了させることができます。たとえば、uv.timer_start()を呼び出した後にuv.unref()を呼び出すことで参照を解除できます。
ハンドルは参照または参照解除できます。参照カウント方式はカウンタを使用しないため、両方の操作はべき等です。
すべてのアクティブなハンドルはデフォルトで参照されます。uv.is_active()で、アクティブであることの詳細な説明を参照してください。

uv_timer_t — タイマーハンドル luv-timer-handle uv_timer_t

> uv_handle_t 関数も適用されます。
タイマーハンドルは、将来呼び出されるコールバックをスケジュールするために使用されます。
uv.new_timer() uv.new_timer()
新しいuv_timer_tを作成して初期化します。それをラップするLuaユーザーデータが返されます。
戻り値: uv_timer_t ユーザーデータまたは失敗
-- 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)
パラメータ
timer: uv_timer_t ユーザーデータ
timeout: 整数
repeat: 整数
callback: 呼び出し可能
タイマーを開始します。timeoutrepeatはミリ秒単位です。
timeoutがゼロの場合、コールバックは次のイベントループ反復で実行されます。repeatがゼロ以外の場合、コールバックは最初にtimeoutミリ秒後に実行され、その後repeatミリ秒ごとに繰り返し実行されます。
戻り値: 0 または 失敗
uv.timer_stop({timer}) uv.timer_stop()
> メソッド形式 timer:stop()
パラメータ
timer: uv_timer_t ユーザーデータ
タイマーを停止します。コールバックはそれ以上呼び出されません。
戻り値: 0 または 失敗
uv.timer_again({timer}) uv.timer_again()
> メソッド形式 timer:again()
パラメータ
timer: uv_timer_t ユーザーデータ
タイマーを停止し、繰り返しタイマーであれば、repeat値をタイムアウトとして使用して再起動します。タイマーが一度も開始されていない場合はEINVALが発生します。
戻り値: 0 または 失敗
uv.timer_set_repeat({timer}, {repeat}) uv.timer_set_repeat()
> メソッド形式 timer:set_repeat(repeat)
パラメータ
timer: uv_timer_t ユーザーデータ
repeat: 整数
繰り返し間隔の値をミリ秒単位で設定します。タイマーは、コールバックの実行時間に関係なく、指定された間隔で実行されるようにスケジュールされ、タイムスライスオーバーランの場合には通常のタイマーセマンティクスに従います。
たとえば、50ミリ秒の繰り返しタイマーが最初に17ミリ秒実行された場合、33ミリ秒後に再度実行されるようにスケジュールされます。他のタスクが最初のタイマーコールバック後の33ミリ秒以上を消費した場合、コールバックはできるだけ早く実行されます。
戻り値: なし。
uv.timer_get_repeat({timer}) uv.timer_get_repeat()
> メソッド形式 timer:get_repeat()
パラメータ
timer: uv_timer_t ユーザーデータ
タイマーの繰り返し値を取得します。
戻り値: 整数
uv.timer_get_due_in({timer}) uv.timer_get_due_in()
> メソッド形式 timer:get_due_in()
パラメータ
timer: uv_timer_t ユーザーデータ
タイマーの期限切れまでの値、または期限切れの場合は0を取得します。時間はuv.now()を基準としています。
戻り値: 整数
注記: libuvバージョン1.40.0の新機能です。

uv_prepare_t — 準備ハンドル luv-prepare-handle uv_prepare_t

> uv_handle_t 関数も適用されます。
準備ハンドルは、ループ反復ごとに1回、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ユーザーデータが返されます。
戻り値: uv_prepare_t ユーザーデータ
uv.prepare_start({prepare}, {callback}) uv.prepare_start()
> メソッド形式 prepare:start(callback)
パラメータ
prepare: uv_prepare_t ユーザーデータ
callback: 呼び出し可能
指定されたコールバックでハンドルを開始します。
戻り値: 0 または 失敗
uv.prepare_stop({prepare}) uv.prepare_stop()
> メソッド形式 prepare:stop()
パラメータ
prepare: uv_prepare_t ユーザーデータ
ハンドルを停止します。コールバックはそれ以上呼び出されません。
戻り値: 0 または 失敗

uv_check_t — チェックハンドル luv-check-handle uv_check_t

> uv_handle_t 関数も適用されます。
チェックハンドルは、ループ反復ごとに1回、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ユーザーデータが返されます。
戻り値: uv_check_t ユーザーデータ
uv.check_start({check}, {callback}) uv.check_start()
> メソッド形式 check:start(callback)
パラメータ
check: uv_check_t ユーザーデータ
callback: 呼び出し可能
指定されたコールバックでハンドルを開始します。
戻り値: 0 または 失敗
uv.check_stop({check}) uv.check_stop()
> メソッド形式 check:stop()
パラメータ
check: uv_check_t ユーザーデータ
ハンドルを停止します。コールバックはそれ以上呼び出されません。
戻り値: 0 または 失敗

uv_idle_t — アイドルハンドル luv-idle-handle uv_idle_t

> uv_handle_t 関数も適用されます。
アイドルハンドルは、ループ反復ごとに1回、uv_prepare_tハンドルの直前に指定されたコールバックを実行します。
注記: 準備ハンドルとの顕著な違いは、アクティブなアイドルハンドルがある場合、ループはI/Oをブロックする代わりにゼロタイムアウトポーリングを実行することです。
警告: 名前にもかかわらず、アイドルハンドルはループが実際に「アイドル」状態である場合ではなく、すべてのループ反復でコールバックが呼び出されます。
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ユーザーデータが返されます。
戻り値: uv_idle_t ユーザーデータ
uv.idle_start({idle}, {callback}) uv.idle_start()
> メソッド形式 idle:start(callback)
パラメータ
idle: uv_idle_t ユーザーデータ
callback: 呼び出し可能
指定されたコールバックでハンドルを開始します。
戻り値: 0 または 失敗
uv.idle_stop({check}) uv.idle_stop()
> メソッド形式 idle:stop()
パラメータ
idle: uv_idle_t ユーザーデータ
ハンドルを停止します。コールバックはそれ以上呼び出されません。
戻り値: 0 または 失敗

uv_async_t — 非同期ハンドル luv-async-handle uv_async_t

> uv_handle_t 関数も適用されます。
非同期ハンドルを使用すると、ユーザーはイベントループを「ウェイクアップ」し、別のスレッドからコールバックを呼び出すことができます。
local async
async = uv.new_async(function()
  print("async operation ran")
  async:close()
end)
async:send()
uv.new_async({callback}) uv.new_async()
パラメータ
callback: 呼び出し可能
...: uv.async_send(async, ...) から/への threadargs
新しいuv_async_tを作成して初期化します。それをラップするLuaユーザーデータが返されます。
戻り値: uv_async_t ユーザーデータまたは失敗
注記: 他のハンドル初期化関数とは異なり、これはハンドルをすぐに開始します。
uv.async_send({async}, {...}) uv.async_send()
> メソッド形式 async:send(...)
パラメータ
async: uv_async_t ユーザーデータ
...: threadargs
イベントループをウェイクアップし、非同期ハンドルのコールバックを呼び出します。
戻り値: 0 または 失敗
注記: この関数は任意のスレッドから安全に呼び出すことができます。コールバックはループスレッドで呼び出されます。
警告: libuvはuv.async_send(async)への呼び出しを結合します。つまり、それへのすべての呼び出しがコールバックの実行を生むとは限りません。たとえば、コールバックが呼び出される前にuv.async_send()が連続して5回呼び出された場合、コールバックは1回だけ呼び出されます。コールバックが呼び出された後にuv.async_send()が再び呼び出された場合、再び呼び出されます。

uv_poll_t — ポーリングハンドル luv-poll-handle uv_poll_t

> uv_handle_t 関数も適用されます。
ポーリングハンドルは、poll(2)(https://linux.die.net/man/2/poll)と同様に、ファイルディスクリプタの読み取り可能性と書き込み可能性を監視するために使用されます。
ポーリングハンドルの目的は、イベントループにソケットの状態変化を知らせるためにイベントループに依存する外部ライブラリ(c-aresやlibssh2など)の統合を可能にすることです。他の目的でuv_poll_tを使用することはお勧めしません。 uv_tcp_tuv_udp_tなどは、特にWindowsではuv_poll_tで達成できるものよりも高速でスケーラブルな実装を提供します。
ポーリングハンドルは、ファイルディスクリプタが読み取り可能または書き込み可能ではない場合でも、時々そうであると信号を送信することがあります。したがって、ユーザーは、fdから読み取ったり書き込んだりしようとするときに、常にEAGAINまたは同等のものを処理する準備を整えておく必要があります。
同じソケットに対して複数のアクティブなポーリングハンドルを持つことはできません。これにより、libuvがビジーループ状態になったり、誤動作したりする可能性があります。
アクティブなポーリングハンドルによってポーリングされている間にファイルディスクリプタを閉じることはできません。これにより、ハンドルがエラーを報告する可能性がありますが、別のソケットのポーリングを開始する可能性もあります。ただし、uv.poll_stop()またはuv.close()を呼び出した直後であれば、fdを安全に閉じることができます。
注記: Windowsでは、ソケットのみをポーリングハンドルでポーリングできます。Unixでは、poll(2)で受け入れられるファイルディスクリプタを使用できます。
uv.new_poll({fd}) uv.new_poll()
パラメータ
fd: 整数
ファイルディスクリプタを使用してハンドルを初期化します。
ファイルディスクリプタは非ブロッキングモードに設定されます。
戻り値: uv_poll_t ユーザーデータまたは失敗
uv.new_socket_poll({fd}) uv.new_socket_poll()
パラメータ
fd: 整数
ソケットディスクリプタを使用してハンドルを初期化します。Unixではuv.new_poll()と同じです。Windowsでは、SOCKETハンドルを受け取ります。
ソケットは非ブロッキングモードに設定されます。
戻り値: uv_poll_t ユーザーデータまたは失敗
uv.poll_start({poll}, {events}, {callback}) uv.poll_start()
> メソッド形式 poll:start(events, callback)
パラメータ
poll: uv_poll_t ユーザーデータ
events: 文字列またはnil(デフォルト: "rw"
callback: 呼び出し可能
err: nilまたは文字列
events: 文字列またはnil
ファイルディスクリプタのポーリングを開始します。events は、"r""w""rw""d""rd""wd""rwd""p""rp""wp""rwp""dp""rdp""wdp"、または"rwdp"です。ここで、rREADABLEwWRITABLEdDISCONNECTpPRIORITIZEDを表します。イベントが検出されるとすぐに、ステータスが0に設定され、検出されたイベントがeventsフィールドに設定された状態でコールバックが呼び出されます。
ハンドルがアクティブな間は、ユーザーがソケットを閉じるべきではありません。それでもユーザーがソケットを閉じると、エラーステータスを報告するコールバックが呼び出される可能性がありますが、これは保証されていません。
戻り値: 0 または 失敗
注記: すでにアクティブなハンドルに対してuv.poll_start()を呼び出しても問題ありません。これにより、監視対象のイベントマスクが更新されます。
uv.poll_stop({poll}) uv.poll_stop()
> メソッド形式 poll:stop()
パラメータ
poll: uv_poll_t ユーザーデータ
ファイルディスクリプタのポーリングを停止します。コールバックは呼び出されなくなります。
戻り値: 0 または 失敗

uv_signal_t — シグナルハンドル luv-signal-handle uv_signal_t

> uv_handle_t 関数も適用されます。
シグナルハンドルは、イベントループごとにUnixスタイルのシグナル処理を実装します。
Windows注記:
一部のシグナルの受信はWindowsでエミュレートされます。
SIGINTは通常、ユーザーがCTRL+Cを押したときに配信されます。ただし、Unixと同様に、端末のrawモードが有効になっている場合は生成されません。
SIGBREAKは、ユーザーがCTRL + BREAKを押したときに配信されます。
SIGHUPは、ユーザーがコンソールウィンドウを閉じたときに生成されます。SIGHUPが発生すると、プログラムはクリーンアップを実行するために約10秒の時間を与えられます。その後、Windowsはプログラムを無条件に終了します。
SIGWINCHは、libuvがコンソールがサイズ変更されたことを検出するたびに発生します。SIGWINCHは、プログラムがコンソールへの書き込みにuv_tty_tハンドルを使用している場合、libuvによってエミュレートされます。SIGWINCHは必ずしもタイムリーに配信されるとは限りません。libuvは、カーソルが移動された場合にのみサイズ変更を検出します。rawモードで読み取り可能なuv_tty_tハンドルが使用されている場合、コンソールバッファのサイズ変更もSIGWINCHシグナルをトリガーします。
他のシグナルのウォッチャーは正常に作成できますが、これらのシグナルは受信されません。これらのシグナルは、SIGILL、SIGABRT、SIGFPE、SIGSEGV、SIGTERM、SIGKILLです。
プログラムでシグナルを発生させるためのraise()またはabort()への呼び出しは、libuvによって検出されません。これらはシグナルウォッチャーをトリガーしません。
Unix注記:
SIGKILLとSIGSTOPはキャッチできません。
libuvを介してSIGBUS、SIGFPE、SIGILL、またはSIGSEGVを処理すると、未定義の動作になります。
SIGABRTは、abort()(例:assert()経由)によって生成された場合は、libuvによってキャッチされません。
Linuxでは、SIGRT0とSIGRT1(シグナル32と33)は、NPTL pthreadsライブラリによってスレッドの管理に使用されます。これらのシグナルのウォッチャーをインストールすると、予測できない動作につながるため、強く推奨しません。将来のバージョンの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ユーザーデータを返します。
戻り値: uv_signal_t userdata または fail
uv.signal_start({signal}, {signum}, {callback}) uv.signal_start()
> メソッド形式 signal:start(signum, callback)
パラメータ
signal: uv_signal_t userdata
signum: 整数 または 文字列
callback: 呼び出し可能
signum: 文字列
指定されたコールバックでハンドルを開始し、指定されたシグナルを監視します。
戻り値: 0 または fail uv.signal_start_oneshot()
uv.signal_start_oneshot({signal}, {signum}, {callback})
> メソッド形式 signal:start_oneshot(signum, callback)
パラメータ
signal: uv_signal_t userdata
signum: 整数 または 文字列
callback: 呼び出し可能
signum: 文字列
uv.signal_start()と同じ機能ですが、シグナルが受信された瞬間にシグナルハンドラーがリセットされます。
戻り値: 0 または 失敗
uv.signal_stop({signal}) uv.signal_stop()
> メソッド形式 signal:stop()
パラメータ
signal: uv_signal_t userdata
ハンドルを停止します。コールバックはそれ以上呼び出されません。
戻り値: 0 または 失敗

uv_process_t — プロセスハンドル luv-process-handle uv_process_t

> uv_handle_t 関数も適用されます。
プロセスハンドルは新しいプロセスを生成し、ユーザーがそれを制御し、ストリームを使用して通信チャネルを確立できるようにします。
uv.disable_stdio_inheritance() uv.disable_stdio_inheritance()
このプロセスが親プロセスから継承したファイルディスクリプタ/ハンドルの継承を無効にします。その効果は、このプロセスによって生成された子プロセスがこれらのハンドルを誤って継承しないことです。
継承されたファイルディスクリプタが閉じられたり複製されたりする前に、プログラムのできるだけ早い段階でこの関数を呼び出すことをお勧めします。
戻り値: なし。
注記: この関数はベストエフォートベースで動作します。libuvが継承されたすべてのファイルディスクリプタを検出できるという保証はありません。一般的に、UnixよりもWindowsの方が良好に動作します。
uv.spawn({path}, {options}, {on_exit}) uv.spawn()
パラメータ
path: 文字列
options: テーブル(下記参照)
on_exit: 呼び出し可能
code: 整数
signal: 整数
プロセスハンドルを初期化し、プロセスを開始します。プロセスが正常に生成された場合、この関数は子プロセスのハンドルと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.args - 文字列のリストとしてのコマンドライン引数。最初の文字列はプログラムへのパスにする必要はありません。これはpathで既に提供されています。Windowsでは、これはCreateProcessを使用し、引数を文字列に連結します。これにより、いくつかの奇妙なエラーが発生する可能性があります(Windowsについては、以下のoptions.verbatimを参照してください)。
options.stdio - 子プロセスで使用可能になるファイルディスクリプタを設定します。慣例として、最初のエントリはstdin、stdout、stderrです。(注記: Windowsでは、3番目のファイルディスクリプタ以降は、子プロセスがMSVCRTランタイムを使用する場合のみ、子プロセスで使用できます。)
options.env - 新しいプロセスの環境変数を設定します。
options.cwd - サブプロセスの現在の作業ディレクトリを設定します。
options.uid - 子プロセスのユーザーIDを設定します。
options.gid - 子プロセスのグループIDを設定します。
options.verbatim - trueの場合、引数リストをコマンドライン文字列に変換するときに、引用符で囲んだり、他のエスケープを実行したりしません。このオプションはWindowsシステムでのみ意味があります。Unixでは無視されます。
options.detached - trueの場合、子プロセスをデタッチされた状態で生成します。これにより、子プロセスはプロセッスグループリーダーになり、親プロセスが終了した後も実行を継続できます。親プロセスが子プロセスのプロセスハンドルに対してuv.unref()を呼び出さない限り、子プロセスは親プロセスのイベントループをアクティブな状態に保ち続けます。
options.hide - trueの場合、通常作成されるサブプロセスのコンソールウィンドウを非表示にします。このオプションはWindowsシステムでのみ意味があります。Unixでは無視されます。
options.stdioのエントリは、多くの形式を取ることができます。
数値の場合、子プロセスは親プロセスから同じ0から始まるインデックスのfdを継承します。
uv_stream_tハンドルが渡された場合、ストリームに有効なfdがあるかどうかに応じて、読み書きパイプまたは継承されたストリームとして使用されます。
nilプレースホルダーを含めると、子プロセスでそのfdが無視されます。
子プロセスが終了すると、終了コードとシグナルを使用してon_exitが呼び出されます。
戻り値: uv_process_t userdata整数
uv.process_kill({process}, {signum}) uv.process_kill()
> メソッド形式 process:kill(signum)
パラメータ
process: uv_process_t userdata
signum: 整数 または 文字列 または nil(デフォルト: sigterm
指定されたシグナルを指定されたプロセスハンドルに送信します。uv_signal_tに関するドキュメント、特にWindowsに関するドキュメントを確認してください。
戻り値: 0 または 失敗
uv.kill({pid}, {signum}) uv.kill()
パラメータ
pid: 整数
signum: 整数 または 文字列 または nil(デフォルト: sigterm
指定されたシグナルを指定されたPIDに送信します。uv_signal_tに関するドキュメント、特にWindowsに関するドキュメントを確認してください。
戻り値: 0 または 失敗
uv.process_get_pid({process}) uv.process_get_pid()
> メソッド形式 process:get_pid()
パラメータ
process: uv_process_t userdata
ハンドルのpidを返します。
戻り値: 整数

uv_stream_t — ストリームハンドル luv-stream-handle uv_stream_t

> uv_handle_t 関数も適用されます。
ストリームハンドルは、双方向通信チャネルの抽象化を提供します。uv_stream_tは抽象型であり、libuvはuv_tcp_tuv_pipe_tuv_tty_tの形式で3つのストリーム実装を提供します。
uv.shutdown({stream} [, {callback}]) uv.shutdown()
> メソッド形式 stream:shutdown([callback])
パラメータ
stream: uv_stream_tのサブタイプのuserdata
callback: 呼び出し可能 または nil
err: nilまたは文字列
双方向ストリームの送信側(書き込み側)をシャットダウンします。保留中の書き込み要求が完了するのを待ちます。シャットダウンが完了すると、コールバックが呼び出されます。
戻り値: uv_shutdown_t userdata または fail
uv.listen({stream}, {backlog}, {callback}) uv.listen()
> メソッド形式 stream:listen(backlog, callback)
パラメータ
stream: uv_stream_tのサブタイプのuserdata
backlog: 整数
callback: 呼び出し可能
err: nilまたは文字列
着信接続のリスニングを開始します。backlogは、カーネルがキューに入れる可能性のある接続数を示し、listen(2)と同じです。新しい着信接続が受信されると、コールバックが呼び出されます。
戻り値: 0 または 失敗
uv.accept({stream}, {client_stream}) uv.accept()
> メソッド形式 stream:accept(client_stream)
パラメータ
stream: uv_stream_tのサブタイプのuserdata
client_stream: uv_stream_tのサブタイプのuserdata
この呼び出しは、着信接続を受け入れるためにuv.listen()と組み合わせて使用されます。接続を受け入れるには、コールバックを受信した後にこの関数を呼び出します。
接続コールバックが呼び出されると、この関数が初めて正常に完了することが保証されます。2回以上使用しようとすると、失敗する可能性があります。接続呼び出しごとにこの関数を1回だけ呼び出すことをお勧めします。
戻り値: 0 または 失敗
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
callback: 呼び出し可能
err: nilまたは文字列
data: 文字列 または nil
着信ストリームからデータを読み取ります。読み取るデータがなくなるか、uv.read_stop()が呼び出されるまで、コールバックは複数回実行されます。EOFに達すると、datanilになります。
戻り値: 0 または 失敗
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
ストリームからのデータの読み取りを停止します。読み取りコールバックは呼び出されなくなります。
この関数はべき等であり、停止したストリームに対して安全に呼び出すことができます。
戻り値: 0 または 失敗
uv.write({stream}, {data} [, {callback}]) uv.write()
> メソッド形式 stream:write(data, [callback])
パラメータ
stream: uv_stream_tのサブタイプのuserdata
data: バッファ
callback: 呼び出し可能 または nil
err: nilまたは文字列
ストリームにデータ書き込み。
dataには、Lua文字列または文字列のテーブルを指定できます。テーブルが渡された場合、Cバックエンドはwritevを使用して、単一システムコールですべての文字列を送信します。
オプションのcallbackは、書き込みが完了した時点を知るためのものです。
戻り値: uv_write_t userdata または fail
uv.write2({stream}, {data}, {send_handle} [, {callback}]) uv.write2()
> メソッド形式 stream:write2(data, send_handle, [callback])
パラメータ
stream: uv_stream_tのサブタイプのuserdata
data: バッファ
send_handle: uv_stream_t のサブタイプのuserdata
callback: 呼び出し可能 または nil
err: nilまたは文字列
ハンドルをパイプ経由で送信するための拡張書き込み関数。パイプはipcオプションをtrueに設定して初期化する必要があります。
戻り値: uv_write_t userdata または fail
注記: send_handleは、サーバーまたは接続(リスニング状態または接続状態)であるTCPソケットまたはパイプである必要があります。バインドされたソケットまたはパイプはサーバーと見なされます。
uv.try_write({stream}, {data}) uv.try_write()
> メソッド形式 stream:try_write(data)
パラメータ
stream: uv_stream_tのサブタイプのuserdata
data: バッファ
uv.write() と同じですが、すぐに完了できない場合は書き込み要求をキューに追加しません。
書き込まれたバイト数を返します(提供されたバッファサイズより少ない場合があります)。
戻り値: 整数または失敗
uv.try_write2({stream}, {data}, {send_handle}) uv.try_write2()
> メソッド形式 stream:try_write2(data, send_handle)
パラメータ
stream: uv_stream_tのサブタイプのuserdata
data: バッファ
send_handle: uv_stream_t のサブタイプのuserdata
uv.write2() と似ていますが、uv.try_write() のプロパティを持っています。Windowsではサポートされておらず、UV_EAGAINを返します。
書き込まれたバイト数を返します(提供されたバッファサイズより少ない場合があります)。
戻り値: 整数または失敗
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
ストリームのブロッキングモードを有効または無効にします。
ブロッキングモードが有効になっている場合、すべての書き込みは同期的に完了します。それ以外の場合はインターフェースは変更されません。たとえば、操作の完了または失敗は、非同期的に行われるコールバックを通じて引き続き報告されます。
戻り値: 0 または 失敗
警告: このAPIに過度に依存することはお勧めしません。将来大幅に変更される可能性があります。現在、これはWindowsでのみ、uv_pipe_tハンドルに対してのみ機能します。また、libuvは現在、書き込み要求が既に送信された後にブロッキングモードが変更された場合の順序を保証しません。したがって、ストリームを開いたり作成した直後にブロッキングモードを設定することをお勧めします。
uv.stream_get_write_queue_size() uv.stream_get_write_queue_size()
> メソッド形式 stream:get_write_queue_size()
ストリームの書き込みキューサイズを返します。
戻り値: 整数

uv_tcp_t — TCPハンドル luv-tcp-handle uv_tcp_t

> uv_handle_t および uv_stream_t 関数も適用されます。
TCPハンドルは、TCPストリームとサーバーの両方を表すために使用されます。
uv.new_tcp([{flags}]) uv.new_tcp()
パラメータ
flags: string または nil
新しいuv_tcp_tを作成して初期化します。それをラップするLua userdataを返します。flagsは、ファミリ文字列である場合があります。「unix」、「inet」、「inet6」、「ipx」、「netlink」、「x25」、「ax25」、「atmpvc」、「appletalk」、または「packet」。
戻り値: uv_tcp_t userdata または fail
uv.tcp_open({tcp}, {sock}) uv.tcp_open()
> メソッド形式 tcp:open(sock)
パラメータ
tcp: uv_tcp_t userdata
sock: integer
既存のファイルディスクリプターまたはSOCKETをTCPハンドルとして開きます。
戻り値: 0 または 失敗
注記: 渡されたファイルディスクリプターまたはSOCKETは、そのタイプについてチェックされませんが、有効なストリームソケットを表す必要があります。
uv.tcp_nodelay({tcp}, {enable}) uv.tcp_nodelay()
> メソッド形式 tcp:nodelay(enable)
パラメータ
tcp: uv_tcp_t userdata
enable: boolean
Nagleアルゴリズムを有効/無効にします。
戻り値: 0 または 失敗
uv.tcp_keepalive({tcp}, {enable} [, {delay}]) uv.tcp_keepalive()
> メソッド形式 tcp:keepalive(enable, [delay])
パラメータ
tcp: uv_tcp_t userdata
enable: boolean
delay: integer または nil
TCP keep-aliveを有効/無効にします。delayは秒単位の初期遅延で、enablefalseの場合は無視されます。
戻り値: 0 または 失敗
uv.tcp_simultaneous_accepts({tcp}, {enable}) uv.tcp_simultaneous_accepts()
> メソッド形式 tcp:simultaneous_accepts(enable)
パラメータ
tcp: uv_tcp_t userdata
enable: boolean
新しいTCP接続をリスニングしているときに、オペレーティングシステムによってキューに入れられる同時非同期アクセプトリクエストを有効/無効にします。
この設定は、目的のパフォーマンスに合わせてTCPサーバーを調整するために使用されます。同時アクセプトを使用すると、接続のアクセプトレートが大幅に向上する可能性がありますが(そのため、デフォルトで有効になっています)、マルチプロセス設定での負荷分散が不均一になる可能性があります。
戻り値: 0 または 失敗
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: table または nil
ipv6only: boolean
ハンドルをホストとポートにバインドします。hostはIPアドレスで、ドメイン名ではありません。すべてのflagsは、ipv6onlyフィールドがtrueまたはfalseであるテーブルで設定されます。
ポートが既に使用されている場合、uv.tcp_bind()uv.listen()、またはuv.tcp_connect()からEADDRINUSEエラーが発生することが予想されます。つまり、この関数の呼び出しが成功しても、uv.listen()またはuv.tcp_connect()への呼び出しも成功するとは限りません。
OSが一時ポートを割り当てるように、ポートを0にします。uv.tcp_getsockname()を使用して後で確認できます。
戻り値: 0 または 失敗
uv.tcp_getpeername({tcp}) uv.tcp_getpeername()
> メソッド形式 tcp:getpeername()
パラメータ
tcp: uv_tcp_t userdata
ハンドルに接続されているピアのアドレスを取得します。
戻り値: table または fail
ip : string
family : string
port : integer
uv.tcp_getsockname({tcp}) uv.tcp_getsockname()
> メソッド形式 tcp:getsockname()
パラメータ
tcp: uv_tcp_t userdata
ハンドルがバインドされている現在のアドレスを取得します。
戻り値: table または fail
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
callback: 呼び出し可能
err: nilまたは文字列
IPv4またはIPv6 TCP接続を確立します。
戻り値: uv_connect_t userdata または fail
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
callback: 呼び出し可能 または nil
RSTパケットを送信することでTCP接続をリセットします。これは、SO_LINGERソケットオプションを0のリンガーインターバルで設定し、uv.close()を呼び出すことによって実現されます。プラットフォームの不一致があるため、uv.shutdown()uv.tcp_close_reset()の呼び出しを混在させることは許可されていません。
戻り値: 0 または fail uv.socketpair()
uv.socketpair([{socktype}, [{protocol}, [{flags1}, [{flags2}]]]])
パラメータ
socktype: stringinteger、またはnil(デフォルト: stream
protocol: stringinteger、またはnil(デフォルト: 0)
flags1: table または nil
nonblock: boolean(デフォルト: false
flags2: table または nil
nonblock: boolean(デフォルト: false
指定されたプロパティを持つ接続されたソケットのペアを作成します。結果のハンドルは、uv.tcp_open()に渡したり、uv.spawn()で使用したり、その他の目的で使用したりできます。
文字列として指定された場合、socktype"stream""dgram""raw""rdm"、または"seqpacket"のいずれかである必要があります。
protocolが0またはnilに設定されている場合、ソケットのドメインとタイプに基づいて自動的に選択されます。protocolが文字列として指定されている場合、getprotobyname(3)関数を使用して検索されます(例:「ip」、「icmp」、「tcp」、「udp」など)。
フラグ
nonblock: OVERLAPPEDまたはFIONBIO/`O_NONBLOCK` I/Oで使用するために指定されたソケットハンドルを開きます。これは、libuvによって使用されるハンドルに推奨され、通常はそれ以外には推奨されません。
AF_UNIXのドメインを持つsocketpair(2)と同等です。
戻り値: table または fail
[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_t および uv_stream_t 関数も適用されます。
パイプハンドルは、Unix上のローカルドメインソケットと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: boolean または nil(デフォルト: false
新しいuv_pipe_tを作成して初期化します。それをラップするLua userdataを返します。ipc引数は、このパイプがプロセス間でハンドルの受け渡しに使用されるかどうかを示すブール値です。
戻り値: uv_pipe_t userdata または fail
uv.pipe_open({pipe}, {fd}) uv.pipe_open()
> メソッド形式 pipe:open(fd)
パラメータ
pipe: uv_pipe_t userdata
fd: 整数
既存のファイルディスクリプタまたはuv_handle_tをパイプとして開きます。
戻り値: 0 または 失敗
注意: ファイルディスクリプタはノンブロッキングモードに設定されます。
uv.pipe_bind({pipe}, {name}) uv.pipe_bind()
> メソッド形式 pipe:bind(name)
パラメータ
pipe: uv_pipe_t userdata
name: string
パイプをファイルパス(Unix)または名前(Windows)にバインドします。
戻り値: 0 または 失敗
注意: 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
callback: 呼び出し可能 または nil
err: nilまたは文字列
Unixドメインソケットまたは名前付きパイプに接続します。
戻り値: uv_connect_t userdata または fail
注意: Unix上のパスは、sizeof(sockaddr_un.sun_path)バイト(通常92~108バイト)に切り詰められます。
uv.pipe_getsockname({pipe}) uv.pipe_getsockname()
> メソッド形式 pipe:getsockname()
パラメータ
pipe: uv_pipe_t userdata
Unixドメインソケットまたは名前付きパイプの名前を取得します。
戻り値: string または fail
uv.pipe_getpeername({pipe}) uv.pipe_getpeername()
> メソッド形式 pipe:getpeername()
パラメータ
pipe: uv_pipe_t userdata
ハンドルが接続されているUnixドメインソケットまたは名前付きパイプの名前を取得します。
戻り値: string または fail
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
名前付きパイプの保留中のパイプ数を返します。
戻り値: 整数
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)を呼び出します。
戻り値: 文字列
uv.pipe_chmod({pipe}, {flags}) uv.pipe_chmod()
> メソッド形式 pipe:chmod(flags)
パラメータ
pipe: uv_pipe_t userdata
flags: string
パイプの権限を変更し、異なるユーザーによって実行されるプロセスからアクセスできるようにします。パイプをすべてのユーザーに対して書き込み可能または読み込み可能にします。flagsは、"r""w""rw"、または"wr"です。ここで、rREADABLEwWRITABLEです。この関数はブロッキングです。
戻り値: 0 または 失敗
uv.pipe({read_flags}, {write_flags}) uv.pipe()
パラメータ
read_flags: table または nil
nonblock: boolean(デフォルト: false
write_flags: table または nil
nonblock: boolean(デフォルト: false
接続されたパイプハンドルのペアを作成します。データはwrite fdに書き込み、read fdから読み取ることができます。結果のハンドルはpipe_openに渡したり、spawnで使用したり、その他の目的で使用できます。
フラグ
nonblock: OVERLAPPEDまたはFIONBIO/`O_NONBLOCK` I/Oで使用するために指定されたソケットハンドルを開きます。これは、libuvによって使用されるハンドルに推奨され、通常はそれ以外には推奨されません。
O_CLOEXECフラグが設定されたpipe(2)と同等です。
戻り値: table または fail
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: integer または table または nil (デフォルト: 0)
フラグ
type(flags)numberの場合、0またはuv.constants.PIPE_NO_TRUNCATEでなければなりません。
type(flags)tableの場合、{}または{ no_truncate = true|false }でなければなりません。
type(flags)nilの場合、デフォルト値0を使用します。
サポートされていないフラグに対しては、バインドを実行せずにEINVALを返します。
パイプをファイルパス(Unix)または名前(Windows)にバインドします。
Linuxの抽象名前空間ソケットをサポートします。namelenには先頭の'\0'バイトを含める必要がありますが、末尾のヌルバイトは含める必要はありません。
戻り値: 0 または 失敗
注意: 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: integer または table または nil (デフォルト: 0)
callback: 呼び出し可能 または nil
err: nilまたは文字列
フラグ:
type(flags)numberの場合、0またはuv.constants.PIPE_NO_TRUNCATEでなければなりません。
type(flags)tableの場合、{}または{ no_truncate = true|false }でなければなりません。
type(flags)nilの場合、デフォルト値0を使用します。
サポートされていないフラグに対しては、バインド操作を実行せずにEINVALを返します。
Unixドメインソケットまたは名前付きパイプに接続します。
Linuxの抽象名前空間ソケットをサポートします。namelenには先頭のヌルバイトを含める必要がありますが、末尾のヌルバイトは含める必要はありません。
戻り値: uv_connect_t userdata または fail
注意: 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_t および uv_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()
パラメータ
fd: 整数
readable: boolean
指定されたファイルディスクリプタを使用して新しいTTYストリームを初期化します。通常、ファイルディスクリプタは
0 - stdin
1 - stdout
2 - stderr
Unixでは、この関数はttyname_r(3)を使用してターミナルのfdのパスを決定し、それを開き、渡されたファイルディスクリプタがTTYを参照している場合に使用します。これにより、libuvはTTYをノンブロッキングモードにすることができ、TTYを共有する他のプロセスには影響を与えません。
この関数は、ioctl TIOCGPTNまたはTIOCPTYGNAMEをサポートしていないシステム(たとえばOpenBSDやSolaris)ではスレッドセーフではありません。
戻り値: uv_tty_t userdata または fail
注意: 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 enumです。
0 - UV_TTY_MODE_NORMAL: 初期/通常の端末モード
1 - UV_TTY_MODE_RAW: RAW入力モード(Windowsでは、ENABLE_WINDOW_INPUTも有効になります)
2 - UV_TTY_MODE_IO: IPCのためのバイナリセーフI/Oモード(Unixのみ)
戻り値: 0 または 失敗
uv.tty_reset_mode() uv.tty_reset_mode()
プログラムの終了時に呼び出されます。次のプロセスが引き継ぐために、TTYの設定をデフォルト値にリセットします。
この関数はUnixプラットフォームでは非同期シグナルセーフですが、uv.tty_set_mode() の実行内から呼び出すと、エラーコードEBUSYで失敗する可能性があります。
戻り値: 0 または 失敗
uv.tty_get_winsize({tty}) uv.tty_get_winsize()
> メソッド形式 tty:get_winsize()
パラメータ
tty: uv_tty_t userdata
現在のウィンドウの幅と高さを取得します。
戻り値: integer, integer または fail
uv.tty_set_vterm_state({state}) uv.tty_set_vterm_state()
パラメータ
state: string
コンソールの仮想ターミナルシーケンスをlibuvまたはコンソールで処理するかどうかを制御します。特に、ANSI X3.64とXterm 256色のConEmuサポートを有効にするのに役立ちます。それ以外の場合は、Windows10コンソールは通常自動的に検出されます。stateは"supported"または"unsupported"のいずれかでなければなりません。
この関数はWindowsシステムでのみ意味があります。Unixでは無視されます。
戻り値: なし
uv.tty_get_vterm_state() uv.tty_get_vterm_state()
コンソールの仮想ターミナルシーケンスをlibuvまたはコンソールで処理するかどうか現在の状態を取得します。戻り値は"supported"または"unsupported"です。
この関数はUnixでは実装されておらず、ENOTSUPを返します。
戻り値: string または fail

uv_udp_t — UDPハンドル luv-udp-handle uv_udp_t

> uv_handle_t 関数も適用されます。
UDPハンドルは、クライアントとサーバーの両方のUDP通信をカプセル化します。
uv.new_udp([{flags}]) uv.new_udp()
パラメータ
flags: table または nil
family: string または nil
mmsgs: integer または nil (デフォルト: 1
新しいuv_udp_tを作成して初期化します。それをラップするLuaのuserdataを返します。実際のソケットは遅延して作成されます。
指定されている場合、family"unix""inet""inet6""ipx""netlink""x25""ax25""atmpvc""appletalk"、または"packet"のいずれかでなければなりません。
指定されている場合、mmsgsは一度に受信できるメッセージの数をrecvmmsg(2)を介して決定します(割り当てられたバッファは、指定された数の最大サイズのdgramを収容できるサイズになります)。recvmmsg(2)をサポートするプラットフォームでのみ効果があります。
注意: 後方互換性のために、flagsは文字列または整数にすることもできます。文字列の場合、上記のfamilyキーのように扱われます。整数の場合は、uv_udp_init_exを呼び出すときのflagsパラメーターとして直接使用されます。
戻り値: uv_udp_t userdata または fail
uv.udp_get_send_queue_size() uv.udp_get_send_queue_size()
> メソッド形式 udp:get_send_queue_size()
ハンドルの送信キューサイズを返します。
戻り値: 整数
uv.udp_get_send_queue_count() uv.udp_get_send_queue_count()
> メソッド形式 udp:get_send_queue_count()
ハンドルの送信キュー数を返します。
戻り値: 整数
uv.udp_open({udp}, {fd}) uv.udp_open()
> メソッド形式 udp:open(fd)
パラメータ
udp: uv_udp_t userdata
fd: 整数
既存のファイルディスクリプタまたはWindows SOCKETをUDPハンドルとして開きます。
Unixのみ: sock引数の唯一の要件は、データグラム契約に従うことです(非接続モードで動作し、sendmsg()/recvmsg()などをサポートします)。つまり、rawソケットやnetlinkソケットなどの他のデータグラムタイプのソケットもこの関数に渡すことができます。
ファイルディスクリプタは非ブロッキングモードに設定されます。
注意: 渡されたファイルディスクリプタまたはSOCKETは型がチェックされませんが、有効なデータグラムソケットを表す必要があります。
戻り値: 0 または 失敗
uv.udp_bind({udp}, {host}, {port} [, {flags}]) uv.udp_bind()
> メソッド形式 udp:bind(host, port, [flags])
パラメータ
udp: uv_udp_t userdata
host: string
port: number
flags: table または nil
ipv6only: boolean
reuseaddr: boolean
UDPハンドルをIPアドレスとポートにバインドします。任意のflagsは、reuseaddrまたはipv6onlyフィールドがtrueまたはfalseに等しいテーブルで設定されます。
戻り値: 0 または 失敗
uv.udp_getsockname({udp}) uv.udp_getsockname()
> メソッド形式 udp:getsockname()
パラメータ
udp: uv_udp_t userdata
UDPハンドルのローカルIPとポートを取得します。
戻り値: table または fail
ip : string
family : string
port : integer
uv.udp_getpeername({udp}) uv.udp_getpeername()
> メソッド形式 udp:getpeername()
パラメータ
udp: uv_udp_t userdata
接続されたUDPハンドルで、UDPハンドルのリモートIPとポートを取得します。
戻り値: table または fail
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_addr: string
interface_addr: string または nil
membership: string
マルチキャストアドレスのメンバーシップを設定します。multicast_addrはメンバーシップを設定するマルチキャストアドレスです。interface_addrはインターフェースアドレスです。membershipは文字列"leave"または"join"にすることができます。
戻り値: 0 または 失敗
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_addr: string
interface_addr: string または nil
source_addr: 文字列
membership: string
送信元固有のマルチキャストグループのメンバーシップを設定します。multicast_addrはメンバーシップを設定するマルチキャストアドレスです。interface_addrはインターフェースアドレスです。source_addrは送信元アドレスです。membershipは文字列"leave"または"join"を指定できます。
戻り値: 0 または 失敗
uv.udp_set_multicast_loop({udp}, {on}) uv.udp_set_multicast_loop()
> メソッド形式 udp:set_multicast_loop(on)
パラメータ
udp: uv_udp_t userdata
on: ブール値
IPマルチキャストループフラグを設定します。マルチキャストパケットをローカルソケットにループバックさせます。
戻り値: 0 または 失敗
uv.udp_set_multicast_ttl({udp}, {ttl}) uv.udp_set_multicast_ttl()
> メソッド形式 udp:set_multicast_ttl(ttl)
パラメータ
udp: uv_udp_t userdata
ttl: 整数
マルチキャストTTLを設定します。
ttlは1から255の整数です。
戻り値: 0 または 失敗
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_addr: 文字列
データの送受信を行うマルチキャストインターフェースを設定します。
戻り値: 0 または 失敗
uv.udp_set_broadcast({udp}, {on}) uv.udp_set_broadcast()
> メソッド形式 udp:set_broadcast(on)
パラメータ
udp: uv_udp_t userdata
on: ブール値
ブロードキャストをオンまたはオフにします。
戻り値: 0 または 失敗
uv.udp_set_ttl({udp}, {ttl}) uv.udp_set_ttl()
> メソッド形式 udp:set_ttl(ttl)
パラメータ
udp: uv_udp_t userdata
ttl: 整数
生存時間(TTL)を設定します。
ttlは1から255の整数です。
戻り値: 0 または 失敗
uv.udp_send({udp}, {data}, {host}, {port}, {callback}) uv.udp_send()
> メソッド形式 udp:send(data, host, port, callback)
パラメータ
udp: uv_udp_t userdata
data: バッファ
host: string
port: integer
callback: 呼び出し可能
err: nilまたは文字列
UDPソケットを介してデータを送信します。ソケットが以前uv.udp_bind()でバインドされていない場合、0.0.0.0(「すべてのインターフェース」IPv4アドレス)とランダムなポート番号にバインドされます。
戻り値: uv_udp_send_t userdata または 失敗
uv.udp_try_send({udp}, {data}, {host}, {port}) uv.udp_try_send()
> メソッド形式 udp:try_send(data, host, port)
パラメータ
udp: uv_udp_t userdata
data: バッファ
host: string
port: integer
uv.udp_send()と同じですが、すぐに完了できない場合は送信要求をキューに登録しません。
戻り値: 整数または失敗
uv.udp_recv_start({udp}, {callback}) uv.udp_recv_start()
> メソッド形式 udp:recv_start(callback)
パラメータ
udp: uv_udp_t userdata
callback: 呼び出し可能
err: nilまたは文字列
data: 文字列 または nil
addr: テーブルまたはnil
ip: 文字列
port: integer
family: 文字列
flags: テーブル
partial: ブール値またはnil
mmsg_chunk: ブール値またはnil
データ受信の準備をします。ソケットが以前uv.udp_bind()でバインドされていない場合、0.0.0.0(「すべてのインターフェース」IPv4アドレス)とランダムなポート番号にバインドされます。
戻り値: 0 または 失敗
uv.udp_recv_stop({udp}) uv.udp_recv_stop()
> メソッド形式 udp:recv_stop()
パラメータ
udp: uv_udp_t userdata
着信データグラムの受信を停止します。
戻り値: 0 または 失敗
uv.udp_connect({udp}, {host}, {port}) uv.udp_connect()
> メソッド形式 udp:connect(host, port)
パラメータ
udp: uv_udp_t userdata
host: string
port: integer
UDPハンドルをリモートアドレスとポートに関連付けます。これにより、このハンドルによって送信されるすべてのメッセージは、自動的にその宛先に送信されます。NULLアドレスでこの関数を呼び出すと、ハンドルが切断されます。既に接続されているハンドルでuv.udp_connect()を呼び出すと、EISCONNエラーが発生します。接続されていないハンドルの接続を解除しようとすると、ENOTCONNエラーが返されます。
戻り値: 0 または 失敗

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ユーザーデータを返します。
戻り値: uv_fs_event_t userdata または 失敗
uv.fs_event_start({fs_event}, {path}, {flags}, {callback}) uv.fs_event_start()
> メソッド形式 fs_event:start(path, flags, callback)
パラメータ
fs_event: uv_fs_event_t userdata
path: 文字列
flags: テーブル
watch_entry: ブール値またはnil(デフォルト: false
stat: ブール値またはnil(デフォルト: false
recursive: ブール値またはnil(デフォルト: false
callback: 呼び出し可能
err: nilまたは文字列
filename: 文字列
events: テーブル
change: ブール値またはnil
rename: ブール値またはnil
指定されたパスで変更を監視するコールバックを使用してハンドルを開始します。
戻り値: 0 または 失敗
uv.fs_event_stop() uv.fs_event_stop()
> メソッド形式 fs_event:stop()
ハンドルを停止します。コールバックはそれ以上呼び出されません。
戻り値: 0 または 失敗
uv.fs_event_getpath() uv.fs_event_getpath()
> メソッド形式 fs_event:getpath()
ハンドルによって監視されているパスを取得します。
戻り値: string または fail

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ユーザーデータを返します。
戻り値: uv_fs_poll_t userdata または 失敗
uv.fs_poll_start({fs_poll}, {path}, {interval}, {callback}) uv.fs_poll_start()
> メソッド形式 fs_poll:start(path, interval, callback)
パラメータ
fs_poll: uv_fs_poll_t userdata
path: 文字列
interval: 整数
callback: 呼び出し可能
err: nilまたは文字列
prev: テーブルまたはniluv.fs_statを参照)
curr: テーブルまたはniluv.fs_statを参照)
intervalミリ秒ごとにpathのファイルの変更をチェックします。
注記: 最大の移植性を確保するために、数秒間隔を使用してください。多くのファイルシステムでは、数秒未満の間隔ではすべての変更が検出されません。
戻り値: 0 または 失敗
uv.fs_poll_stop() uv.fs_poll_stop()
> メソッド形式 fs_poll:stop()
ハンドルを停止します。コールバックはそれ以上呼び出されません。
戻り値: 0 または 失敗
uv.fs_poll_getpath() uv.fs_poll_getpath()
> メソッド形式 fs_poll:getpath()
ハンドルによって監視されているパスを取得します。
戻り値: string または fail

ファイルシステム操作 luv-file-system-operations uv_fs_t

ほとんどのファイルシステム関数は、同期的にまたは非同期的に動作できます。同期版が呼び出されると(コールバックを省略すると)、関数は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()
パラメータ
fd: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
close(2)と同等です。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_open({path}, {flags}, {mode} [, {callback}]) uv.fs_open()
パラメータ
path: 文字列
flags: 文字列または整数
mode: integer
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
fd: 整数またはnil
open(2)と同等です。アクセスflagsは整数、または次のいずれかです: "r", "rs", "sr", "r+", "rs+", "sr+", "w", "wx", "xw", "w+", "wx+", "xw+", "a", "ax", "xa", "a+", "ax+", または"xa+"
戻り値(同期版): 整数または失敗
戻り値(非同期版): uv_fs_t userdata
注記: Windowsでは、libuvはCreateFileWを使用するため、ファイルは常にバイナリモードで開かれます。このため、O_BINARYおよびO_TEXTフラグはサポートされていません。
uv.fs_read({fd}, {size} [, {offset} [, {callback}]]) uv.fs_read()
パラメータ
fd: 整数
size: 整数
offset: 整数またはnil
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
data: 文字列 または nil
preadv(2)と同等です。任意のデータが返されます。空の文字列はEOFを示します。
offsetがnilまたは省略されている場合、デフォルトで-1になり、「現在のファイルオフセットを使用および更新する」ことを示します。
注記: offsetが>= 0の場合、現在のファイルオフセットは読み取りによって更新されません。
戻り値(同期版): 文字列または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_unlink({path} [, {callback}]) uv.fs_unlink()
パラメータ
path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
unlink(2)と同等です。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_write({fd}, {data} [, {offset} [, {callback}]]) uv.fs_write()
パラメータ
fd: 整数
data: バッファ
offset: 整数またはnil
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
bytes: 整数またはnil
pwritev(2)と同等です。書き込まれたバイト数を返します。
offsetがnilまたは省略されている場合、デフォルトで-1になり、「現在のファイルオフセットを使用および更新する」ことを示します。
注記: offsetが>= 0の場合、現在のファイルオフセットは書き込みによって更新されません。
戻り値(同期版): 整数または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_mkdir({path}, {mode} [, {callback}]) uv.fs_mkdir()
パラメータ
path: 文字列
mode: integer
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
mkdir(2)と同等です。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_mkdtemp({template} [, {callback}]) uv.fs_mkdtemp()
パラメータ
template: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
path: 文字列またはnil
mkdtemp(3)と同等です。
戻り値(同期版): 文字列または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_mkstemp({template} [, {callback}]) uv.fs_mkstemp()
パラメータ
template: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
fd: 整数またはnil
path: 文字列またはnil
mkstemp(3)に相当します。一時ファイルのハンドルとファイル名を返します。
返値(同期版):整数, 文字列 または 失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_rmdir({path} [, {callback}]) uv.fs_rmdir()
パラメータ
path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
rmdir(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_scandir({path} [, {callback}]) uv.fs_scandir()
パラメータ
path: 文字列
callback: 呼び出し可能
err: nilまたは文字列
成功: uv_fs_t userdata または nil
scandir(3)に相当しますが、APIが少し異なります。uv.fs_scandir_next()に渡せるハンドルを返します。
注記:この関数は同期または非同期で使用できます。コールバックが提供されているかどうかにかかわらず、リクエストのuserdataは常に同期的に返され、コールバックが提供されている場合は同じuserdataがコールバックに渡されます。
返値:uv_fs_t userdata または 失敗
uv.fs_scandir_next({fs}) uv.fs_scandir_next()
パラメータ
fs: uv_fs_t userdata
uv_fs_tuv.fs_scandir()によって返される)に対して呼び出され、次のディレクトリエントリデータ(name, typeペア)を取得します。エントリがなくなると、nilが返されます。
注記:この関数は同期版のみです。非同期版については、uv.fs_opendir()とその関連関数を参照してください。
返値:文字列, 文字列 または nil または 失敗
uv.fs_stat({path} [, {callback}]) uv.fs_stat()
パラメータ
path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
stat: テーブル または nil(下記参照)
stat(2)に相当します。
返値(同期版):テーブル または 失敗
dev : 整数
mode : 整数
nlink : 整数
uid : 整数
gid : 整数
rdev : 整数
ino : 整数
size : 整数
blksize : 整数
blocks : 整数
flags : 整数
gen : 整数
atime : テーブル
sec : 整数
nsec : 整数
mtime : テーブル
sec : 整数
nsec : 整数
ctime : テーブル
sec : 整数
nsec : 整数
birthtime : テーブル
sec : 整数
nsec : 整数
type : 文字列
戻り値(非同期版): uv_fs_t userdata
uv.fs_fstat({fd} [, {callback}]) uv.fs_fstat()
パラメータ
fd: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
stat: テーブル または niluv.fs_stat参照)
fstat(2)に相当します。
返値(同期版):テーブル または 失敗uv.fs_stat参照)
戻り値(非同期版): uv_fs_t userdata
uv.fs_lstat({path} [, {callback}]) uv.fs_lstat()
パラメータ
path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
stat: テーブル または niluv.fs_stat参照)
lstat(2)に相当します。
返値(同期版):テーブル または 失敗uv.fs_stat()参照)
戻り値(非同期版): uv_fs_t userdata
uv.fs_rename({path}, {new_path} [, {callback}]) uv.fs_rename()
パラメータ
path: 文字列
new_path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
rename(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_fsync({fd} [, {callback}]) uv.fs_fsync()
パラメータ
fd: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
fsync(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_fdatasync({fd} [, {callback}]) uv.fs_fdatasync()
パラメータ
fd: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
fdatasync(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_ftruncate({fd}, {offset} [, {callback}]) uv.fs_ftruncate()
パラメータ
fd: 整数
offset: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
ftruncate(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_sendfile()
uv.fs_sendfile({out_fd}, {in_fd}, {in_offset}, {size} [, {callback}])
パラメータ
out_fd: 整数
in_fd: 整数
in_offset: 整数
size: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
bytes: 整数またはnil
sendfile(2)に限定的に相当します。書き込まれたバイト数を返します。
戻り値(同期版): 整数または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_access({path}, {mode} [, {callback}]) uv.fs_access()
パラメータ
path: 文字列
mode: integer
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
アクセス権限: 真偽値 または nil
Unixではaccess(2)に相当します。WindowsではGetFileAttributesW()を使用します。アクセスmodeは、整数または"R""W""X"を含む文字列にすることができます。アクセス権限を示すtrueまたはfalseを返します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_chmod({path}, {mode} [, {callback}]) uv.fs_chmod()
パラメータ
path: 文字列
mode: integer
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
chmod(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_fchmod({fd}, {mode} [, {callback}]) uv.fs_fchmod()
パラメータ
fd: 整数
mode: integer
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
fchmod(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_utime({path}, {atime}, {mtime} [, {callback}]) uv.fs_utime()
パラメータ
path: 文字列
atime: 数値
mtime: 数値
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
utime(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_futime({fd}, {atime}, {mtime} [, {callback}]) uv.fs_futime()
パラメータ
fd: 整数
atime: 数値
mtime: 数値
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
futime(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_lutime({path}, {atime}, {mtime} [, {callback}]) uv.fs_lutime()
パラメータ
path: 文字列
atime: 数値
mtime: 数値
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
lutime(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_link({path}, {new_path} [, {callback}]) uv.fs_link()
パラメータ
path: 文字列
new_path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
link(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_symlink({path}, {new_path} [, {flags} [, {callback}]]) uv.fs_symlink()
パラメータ
path: 文字列
new_path: 文字列
flags: テーブル整数、またはnil
dir: 真偽値
junction: 真偽値
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
symlink(2)に相当します。flagsパラメータが省略された場合、3番目のパラメータはcallbackとして扱われます。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_readlink({path} [, {callback}]) uv.fs_readlink()
パラメータ
path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
path: 文字列またはnil
readlink(2)に相当します。
戻り値(同期版): 文字列または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_realpath({path} [, {callback}]) uv.fs_realpath()
パラメータ
path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
path: 文字列またはnil
realpath(3)に相当します。
戻り値(同期版): 文字列または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_chown({path}, {uid}, {gid} [, {callback}]) uv.fs_chown()
パラメータ
path: 文字列
uid: 整数
gid: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
chown(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_fchown({fd}, {uid}, {gid} [, {callback}]) uv.fs_fchown()
パラメータ
fd: 整数
uid: 整数
gid: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
fchown(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_lchown({fd}, {uid}, {gid} [, {callback}]) uv.fs_lchown()
パラメータ
fd: 整数
uid: 整数
gid: 整数
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
lchown(2)に相当します。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_copyfile({path}, {new_path} [, {flags} [, {callback}]]) uv.fs_copyfile()
パラメータ
path: 文字列
new_path: 文字列
flags: テーブル整数、またはnil
excl: 真偽値
ficlone: 真偽値
ficlone_force: 真偽値
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
ファイルをpathからnew_pathにコピーします。flagsパラメータが省略された場合、3番目のパラメータはcallbackとして扱われます。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_opendir({path} [, {callback} [, {entries}]]) uv.fs_opendir()
パラメータ
path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
dir: luv_dir_t userdata または nil
entries: 整数 または nil
pathをディレクトリストリームとして開きます。uv.fs_readdir()に渡せるハンドルを返します。entriesパラメータは、uv.fs_readdir()の各呼び出しで返されるエントリの最大数を定義します。
返値(同期版):luv_dir_t userdata または 失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_readdir({dir} [, {callback}]) uv.fs_readdir()
> メソッド形式 dir:readdir([callback])
パラメータ
dir: luv_dir_t userdata
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
entries: テーブル または nil(下記参照)
成功したuv.fs_opendir()呼び出しによって返されたディレクトリストリームluv_dir_tを反復処理します。データテーブルのテーブルが返され、エントリ数nは、関連付けられたuv.fs_opendir()呼び出しで使用されたentriesパラメータ以下になります。
返値(同期版):テーブル または 失敗
[1, 2, 3, ..., n] : テーブル
name : 文字列
type : 文字列
戻り値(非同期版): uv_fs_t userdata
uv.fs_closedir({dir} [, {callback}]) uv.fs_closedir()
> メソッド形式 dir:closedir([callback])
パラメータ
dir: luv_dir_t userdata
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
success: ブール値またはnil
成功したuv.fs_opendir()呼び出しによって返されたディレクトリストリームを閉じます。
戻り値(同期版): ブール値または失敗
戻り値(非同期版): uv_fs_t userdata
uv.fs_statfs({path} [, {callback}]) uv.fs_statfs()
パラメータ
path: 文字列
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
テーブル または nil(下記参照)
statfs(2)に相当します。
テーブルまたはnilを返します。
type : 整数
bsize : 整数
blocks : 整数
bfree : 整数
bavail : 整数
files : 整数
ffree : 整数

スレッドプールワークスケジューリング luv-thread-pool-work-scheduling

Libuvは、ユーザーコードを実行し、ループスレッドで通知を受け取るために使用できるスレッドプールを提供します。このスレッドプールは、すべてのファイルシステム操作だけでなく、getaddrinfoおよびgetnameinfoリクエストを実行するためにも内部的に使用されます。
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_tuv_work_tではない)を作成して初期化します。work_callbackはLua関数、またはLuaコードを含む文字列、あるいは関数からダンプされたバイトコードです。それをラップするLuaユーザデータオブジェクトを返します。
返値:luv_work_ctx_t userdata
uv.queue_work({work_ctx}, {...}) uv.queue_work()
> メソッド形式 work_ctx:queue(...)
パラメータ
work_ctx: luv_work_ctx_t userdata
...: threadargs
...からの追加の引数を使用して、スレッドプールからスレッド内の新しいLua状態においてwork_callbackを実行するワークリクエストをキューイングします。work_callbackから返された値は、メインループスレッドで呼び出されるafter_work_callbackに渡されます。
戻り値: ブール値 または 失敗

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
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
addresses: テーブル または nil(下記参照)
getaddrinfo(3)に相当します。nodeまたはserviceのどちらかは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"など)
返値(同期版):テーブル または 失敗
[1, 2, 3, ..., n] : テーブル
addr : 文字列
family : string
port : 整数 または nil
socktype : 文字列
protocol : 文字列
canonname : 文字列 または nil
戻り値 (非同期バージョン): uv_getaddrinfo_t userdata または 失敗
uv.getnameinfo({address} [, {callback}]) uv.getnameinfo()
パラメータ
address: テーブル
ip: 文字列 または nil
port: 整数 または nil
family: 文字列 または 整数 または nil
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
host: 文字列 または nil
service: 文字列 または nil
getnameinfo(3) と同等です。
指定されている場合、family"unix""inet""inet6""ipx""netlink""x25""ax25""atmpvc""appletalk"、または"packet"のいずれかでなければなりません。
戻り値 (同期バージョン): 文字列, 文字列 または 失敗
戻り値 (非同期バージョン): uv_getnameinfo_t userdata または 失敗

スレッドと同期ユーティリティ luv-threading-and-synchronization-utilities

Libuvは、マルチスレッドと同期プリミティブのクロスプラットフォーム実装を提供します。APIは、pthreads APIに大きく準拠しています。
uv.new_thread([{options}, ] {entry}, {...}) uv.new_thread()
パラメータ
options: テーブル または nil
stack_size: 整数 または nil
entry: 関数 または 文字列
...: entry に渡されるthreadargs
luv_thread_t (uv_thread_tではない) を作成および初期化します。それをラップするLuaユーザーデータ を返し、非同期的にentryを実行します。entryはLua関数、またはLuaコードを含む文字列、あるいは関数からダンプされたバイトコードのいずれかになります。追加の引数...entry関数に渡され、オプションのoptionsテーブルを提供できます。現在受け入れられているoptionフィールドはstack_sizeです。
戻り値: luv_thread_t userdata または 失敗
注意: 安全ではありません。Lua状態が閉じられる前に、スレッドのライフサイクルが終了していることを確認してください。
uv.thread_equal({thread}, {other_thread}) uv.thread_equal()
> メソッド形式 thread:equal(other_thread)
パラメータ
thread: luv_thread_t userdata
other_thread: luv_thread_t userdata
2つのスレッドが同じかどうかを示すブール値を返します。この関数は、__eqメタメソッドと同等です。
戻り値: ブール値 uv.thread_setaffinity()
uv.thread_setaffinity({thread}, {affinity} [, {get_old_affinity}])
> メソッド形式 thread:setaffinity(affinity, [get_old_affinity])
パラメータ
thread: luv_thread_t userdata
affinity: テーブル
[1, 2, 3, ..., n] : ブール値
get_old_affinity: ブール値
指定されたスレッドのアフィニティ設定を設定します。
affinityは、各キーがCPU番号で、値がthreadがそのCPUで実行できるかどうかを表すブール値であるテーブルでなければなりません。uv.cpumask_size()以上の長さのaffinityテーブルでない場合、テーブルにないCPU番号のアフィニティはfalseに設定されます。uv.cpumask_size()以上のCPUのアフィニティを設定する必要がある場合、affinityはギャップのない配列のようなテーブルでなければなりません。なぜなら、#affinityuv.cpumask_size()より大きい場合、cpumask_sizeとして使用されるからです。
get_old_affinitytrueの場合、threadの以前のアフィニティ設定が返されます。それ以外の場合は、成功した呼び出しの後、trueが返されます。
注意: スレッドアフィニティの設定は、Windowsではアトミックではありません。macOSではサポートされていません。
戻り値: テーブル または ブール値 または 失敗
[1, 2, 3, ..., n] : ブール値
uv.thread_getaffinity({thread} [, {mask_size}]) uv.thread_getaffinity()
> メソッド形式 thread:getaffinity([mask_size])
パラメータ
thread: luv_thread_t userdata
mask_size: 整数
指定されたスレッドのアフィニティ設定を取得します。
mask_sizeが指定されている場合、uv.cpumask_size()以上でなければなりません。mask_sizeパラメータが省略された場合、uv.cpumask_size()の戻り値が使用されます。各キーがCPU番号に対応し、値がthreadがそのCPUで実行できるかどうかを表すブール値である配列のようなテーブルを返します。
注意: スレッドアフィニティの取得は、Windowsではアトミックではありません。macOSではサポートされていません。
戻り値: table または fail
[1, 2, 3, ..., n] : ブール値
uv.thread_getcpu() uv.thread_getcpu()
呼び出し元のスレッドが実行されているCPU番号を取得します。
注意: 最初のCPUは0ではなく1として返されます。これにより、数値がuv.thread_getaffinityuv.thread_setaffinityで使用されるテーブルキーに対応します。
戻り値: 整数または失敗
uv.thread_setpriority({thread}, {priority}) uv.thread.setpriority()
> メソッド形式 thread:setpriority(priority)
パラメータ
thread: luv_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
戻り値: ブール値 または 失敗
uv.thread_getpriority({thread}) uv.thread.getpriority()
> メソッド形式 thread:getpriority()
パラメータ
thread: luv_thread_t userdata
スレッドの優先順位設定を取得します。
指定されたスレッドのスケジューリング優先順位を取得します。返される優先順位値はプラットフォームに依存します。
Linuxの場合、スケジュールポリシーがSCHED_OTHER(デフォルト)の場合、優先順位は0です。
戻り値: 数値 または 失敗
uv.thread_self() uv.thread_self()
これが呼び出されたスレッドのハンドルを返します。
戻り値: luv_thread_t
uv.thread_join({thread}) uv.thread_join()
> メソッド形式 thread:join()
パラメータ
thread: luv_thread_t userdata
threadがエントリ関数の実行を終了するのを待ちます。
戻り値: ブール値 または 失敗
uv.sleep({msec}) uv.sleep()
パラメータ
msec: 整数
これが呼び出されたスレッドをミリ秒数だけ一時停止します。
戻り値: なし。

その他ユーティリティ luv-miscellaneous-utilities

uv.exepath() uv.exepath()
実行可能ファイルのパスを返します。
戻り値: string または fail
uv.cwd() uv.cwd()
現在の作業ディレクトリを返します。
戻り値: string または fail
uv.chdir({cwd}) uv.chdir()
パラメータ
cwd: 文字列
文字列cwdを使用して現在の作業ディレクトリを設定します。
戻り値: 0 または 失敗
uv.get_process_title() uv.get_process_title()
現在のプロセスのタイトルを返します。
戻り値: string または fail
uv.set_process_title({title}) uv.set_process_title()
パラメータ
title: 文字列
文字列titleを使用して現在のプロセスのタイトルを設定します。
戻り値: 0 または 失敗
uv.get_total_memory() uv.get_total_memory()
現在のシステム総メモリをバイト単位で返します。
戻り値: 数値
uv.get_free_memory() uv.get_free_memory()
現在の空きシステムメモリをバイト単位で返します。
戻り値: 数値
uv.get_constrained_memory() uv.get_constrained_memory()
OSによって課せられた制限に基づいて、プロセスで使用可能なメモリ量をバイト単位で取得します。そのような制約がない場合、または制約が不明な場合、0が返されます。この値がシステム総メモリよりも小さくても大きくても異常ではありません。
戻り値: 数値
uv.get_available_memory() uv.get_available_memory()
プロセスで使用可能な空きメモリの量(バイト単位)を取得します。これは、OSによって課せられた制限を考慮に入れるため、uv.get_free_memory()とは異なります。そのような制約がない場合、または制約が不明な場合、返される量はuv.get_free_memory()と同じになります。
戻り値: 数値
uv.resident_set_memory() uv.resident_set_memory()
現在のプロセスの常駐セットサイズ(RSS)を返します。
戻り値: 整数または失敗
uv.getrusage() uv.getrusage()
リソース使用状況を返します。
戻り値: table または fail
utime : テーブル (使用されたユーザーCPU時間)
sec : 整数
usec : 整数
stime : テーブル (使用されたシステムCPU時間)
sec : 整数
usec : 整数
maxrss : 整数 (最大常駐セットサイズ)
ixrss : 整数 (共有メモリの積分サイズ)
idrss : 整数 (共有されていないデータサイズの積分)
isrss : 整数 (共有されていないスタックサイズの積分)
minflt : 整数 (ページの再取得(ソフトページフォルト))
majflt : 整数 (ページフォルト(ハードページフォルト))
nswap : 整数 (スワップ)
inblock : 整数 (ブロック入力操作)
oublock : 整数 (ブロック出力操作)
msgsnd : 整数 (送信されたIPCメッセージ)
msgrcv : 整数 (受信されたIPCメッセージ)
nsignals : 整数 (受信されたシグナル)
nvcsw : 整数 (任意のコンテキストスイッチ)
nivcsw : 整数 (非任意のコンテキストスイッチ)
uv.available_parallelism() uv.available_parallelism()
プログラムが使用するべきデフォルトの並列処理量の推定値を返します。常にゼロ以外の値を返します。
Linuxでは、呼び出し元のスレッドのCPUアフィニティマスクを検査して、特定のCPUにピン留めされているかどうかを判断します。
Windowsでは、64個以上の論理CPUを持つシステムでは、利用可能な並列処理量が過小報告される可能性があります。
他のプラットフォームでは、オペレーティングシステムがオンラインと見なすCPUの数を報告します。
戻り値: 整数
uv.cpu_info() uv.cpu_info()
システム上のCPUに関する情報を、検出された各CPUのテーブルのテーブルとして返します。
戻り値: table または fail
[1, 2, 3, ..., n] : テーブル
model : 文字列
speed : 数値
times : テーブル
user : 数値
nice : 数値
sys : 数値
idle : 数値
irq : 数値
uv.cpumask_size() uv.cpumask_size()
プロセス/スレッドのアフィニティに使用されるマスクの最大サイズを返します。現在のプラットフォームでアフィニティがサポートされていない場合はENOTSUPを返します。
戻り値: 整数または失敗
uv.getpid() uv.getpid()
非推奨: 代わりにuv.os_getpid()を使用してください。
uv.getuid() uv.getuid()
プロセスのユーザーIDを返します。
戻り値: 整数
注意: これはlibuv関数ではなく、Windowsではサポートされていません。
uv.getgid() uv.getgid()
プロセスのグループIDを返します。
戻り値: 整数
注意: これはlibuv関数ではなく、Windowsではサポートされていません。
uv.setuid({id}) uv.setuid()
パラメータ
id: 整数
整数idを使用してプロセスのユーザーIDを設定します。
戻り値: なし。
注意: これはlibuv関数ではなく、Windowsではサポートされていません。
uv.setgid({id}) uv.setgid()
パラメータ
id: 整数
整数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年1月1日)からカウントされ、時刻調整の影響を受けます。過去にジャンプすることがあります。
単調クロックは過去の任意の時点からカウントされ、過去にジャンプすることはありません。
戻り値: table または fail
sec: integer
nsec: integer
uv.uptime() uv.uptime()
現在のシステムの稼働時間を秒単位で返します。
戻り値: 数値 または 失敗
uv.print_all_handles() uv.print_all_handles()
メインループに関連付けられたすべてのハンドルをstderrに出力します。形式は[flags] handle-type handle-addressです。flagsは、参照されている場合は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()
パラメータ
fd: 整数
指定されたファイル記述子fdで使用するストリームの種類を検出するために使用されます。通常、これは初期化中にstdioストリームの種類を推測するために使用されます。
戻り値: 文字列
uv.gettimeofday() uv.gettimeofday()
gettimeofday(2)のクロスプラットフォーム実装です。unix時刻の秒とマイクロ秒をペアとして返します。
戻り値: integer, integer または fail
uv.interface_addresses() uv.interface_addresses()
システム上のネットワークインターフェースに関するアドレス情報を表形式で返します。各テーブルキーはインターフェースの名前であり、各関連値は、ipfamilynetmaskinternalmacフィールドを持つアドレス情報の配列です。
戻り値: table
[name(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対応実装です。
戻り値: string または fail
uv.if_indextoiid({ifindex}) uv.if_indextoiid()
パラメータ
ifindex: integer
IPv6スコープアドレスで使用できるネットワークインターフェース識別子を取得します。Windowsでは、数値ifindexを文字列として返します。その他のプラットフォームでは、uv.if_indextoname()が使用されます。
戻り値: string または fail
uv.loadavg() uv.loadavg()
ロード平均を3つの数値の組として返します。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()
ホスト名を返します。
戻り値: 文字列
uv.os_getenv({name} [, {size}]) uv.os_getenv()
パラメータ
name: string
size: integer (デフォルト = LUAL_BUFFERSIZE)
nameで指定された環境変数を文字列として返します。内部バッファサイズはsizeを定義することで設定できます。省略された場合、LUAL_BUFFERSIZEが使用されます。環境変数が内部バッファで使用可能なストレージを超える場合、ENOBUFSが返されます。一致する環境変数が存在しない場合、ENOENTが返されます。
戻り値: string または fail
警告: この関数はスレッドセーフではありません。
uv.os_setenv({name}, {value}) uv.os_setenv()
パラメータ
name: string
value: string
nameで指定された環境変数を文字列valueで設定します。
戻り値: ブール値 または 失敗
警告: この関数はスレッドセーフではありません。
uv.os_unsetenv({name}) uv.os_unsetenv()
パラメータ
name: string
nameで指定された環境変数をアンセットします。
戻り値: ブール値 または 失敗
警告: この関数はスレッドセーフではありません。
uv.os_environ() uv.os_environ()
すべての環境変数を、対応する値に関連付けられた名前の動的テーブルとして返します。
戻り値: table
警告: この関数はスレッドセーフではありません。
uv.os_homedir() uv.os_homedir()
戻り値: string または fail
警告: この関数はスレッドセーフではありません。
uv.os_tmpdir() uv.os_tmpdir()
戻り値: string または fail
警告: この関数はスレッドセーフではありません。
uv.os_get_passwd() uv.os_get_passwd()
パスワードファイル情報を返します。
戻り値: table
username : string
uid : 整数
gid : 整数
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: 整数
pidで指定されたプロセスのスケジューリング優先順位を返します。
戻り値: 数値 または 失敗
uv.os_setpriority({pid}, {priority}) uv.os_setpriority()
パラメータ
pid: 整数
priority: integer
pidで指定されたプロセスのスケジューリング優先順位を設定します。priorityの範囲は-20(高優先度)から19(低優先度)です。
戻り値: ブール値 または 失敗
uv.random({len}, {flags} [, {callback}]) uv.random()
パラメータ
len: integer
flags: nil (下記参照)
callback: 呼び出し可能(非同期版)またはnil(同期版)
err: nilまたは文字列
bytes: string または nil
システムCSPRNGから取得した暗号的に安全なランダムバイトで、長さlenの文字列を埋めます。flagsは将来の拡張のために予約されており、現在はnilまたは0または{}でなければなりません。
短い読み込みはできません。lenより少ないランダムバイトしか使用できない場合、非ゼロのエラー値が返されるか、コールバックに渡されます。コールバックが省略された場合、この関数は同期的に完了します。
十分なエントロピーがない場合、同期のバージョンは無限にブロックされる可能性があります。システムのエントロピーが少ない場合、非同期のバージョンは完了しない可能性があります。
戻り値(同期版): 文字列または失敗
戻り値(非同期バージョン): 0 または fail
uv.translate_sys_error({errcode}) uv.translate_sys_error()
パラメータ
errcode: integer
プラットフォーム依存のエラーコードに相当するlibuvエラーメッセージとエラー名(両方とも文字列形式、luv-error-handlingerrnameを参照)を返します。UnixではPOSIXエラーコード(errnoに格納されているもの)、WindowsではWin32エラーコード(GetLastError()またはWSAGetLastError()によって返されるもの)。
戻り値: string, string または nil

メトリクス操作 luv-metrics-operations

uv.metrics_idle_time() uv.metrics_idle_time()
イベントループがカーネルのイベントプロバイダ(例:epoll_wait)でアイドル状態であった時間を取得します。この呼び出しはスレッドセーフです。
戻り値は、uv_loop_tがアイドル時間の収集用に設定されてから、カーネルのイベントプロバイダでアイドル状態だった累積時間です。
注記: イベントループは、"metrics_idle_time"を使用してloop_configureを呼び出すまで、イベントプロバイダのアイドル時間を累積しません。
戻り値: 数値
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リポジトリのコミットdcd1a1c(2023年8月23日)まで最新のLUVドキュメントの再フォーマット版です。https://github.com/luvit/luv/commit/dcd1a1cad5b05634a7691402d6ca2f214fb4ae76
許可を得てhttps://github.com/nanotee/luv-vimdocsに基づいています。
メイン
コマンドインデックス
クイックリファレンス