# API設計書

## 概要

本ドキュメントは、libuv v1.x のパブリック C API の設計仕様を記述したものである。libuv はクロスプラットフォーム非同期 I/O ライブラリであり、イベントループ、ネットワーク I/O、ファイルシステム操作、プロセス管理、スレッド、同期プリミティブ等の統一的な API を提供する。Node.js の基盤ライブラリとして広く利用されている。

すべての API は C 言語のヘッダファイル `include/uv.h` を通じて公開され、`UV_EXTERN` マクロにより共有ライブラリ/静的ライブラリの両方で使用可能である。

## 共通仕様

### ヘッダファイル

```c
#include <uv.h>
```

### 認証方式

該当なし（C ライブラリのため認証機構は存在しない）

### 共通ヘッダー

該当なし（C ライブラリのため HTTP ヘッダーは存在しない）

### 共通エラーレスポンス

libuv の関数は基本的に `int` 型の戻り値を返し、成功時は `0`、エラー時は負のエラーコード（`UV_E*`）を返す。

| エラーコード | 値 | 説明 |
| --- | --- | --- |
| `UV_E2BIG` | 負値 | 引数リストが長すぎる |
| `UV_EACCES` | 負値 | 許可が拒否された |
| `UV_EADDRINUSE` | 負値 | アドレスが既に使用中 |
| `UV_EADDRNOTAVAIL` | 負値 | アドレスが利用できない |
| `UV_EAFNOSUPPORT` | 負値 | アドレスファミリがサポートされていない |
| `UV_EAGAIN` | 負値 | リソースが一時的に利用できない |
| `UV_EBADF` | 負値 | 不正なファイルディスクリプタ |
| `UV_EBUSY` | 負値 | リソースがビジーまたはロック中 |
| `UV_ECANCELED` | 負値 | 操作がキャンセルされた |
| `UV_ECONNABORTED` | 負値 | ソフトウェアにより接続が中止された |
| `UV_ECONNREFUSED` | 負値 | 接続が拒否された |
| `UV_ECONNRESET` | 負値 | 接続がリセットされた |
| `UV_EEXIST` | 負値 | ファイルが既に存在する |
| `UV_EINVAL` | 負値 | 無効な引数 |
| `UV_EIO` | 負値 | I/O エラー |
| `UV_EMFILE` | 負値 | オープンファイルが多すぎる |
| `UV_ENOMEM` | 負値 | メモリ不足 |
| `UV_ENOENT` | 負値 | ファイルまたはディレクトリが存在しない |
| `UV_ENOSPC` | 負値 | デバイスに空きスペースがない |
| `UV_ENOSYS` | 負値 | 関数が実装されていない |
| `UV_EPERM` | 負値 | 操作が許可されていない |
| `UV_EPIPE` | 負値 | パイプが壊れている |
| `UV_ETIMEDOUT` | 負値 | 接続がタイムアウトした |
| `UV_EOF` | 負値 | ファイル終端 |
| `UV_UNKNOWN` | 負値 | 不明なエラー |

### エラーハンドリング関数

| 関数シグネチャ | 説明 |
| --- | --- |
| `const char* uv_strerror(int err)` | エラーコードに対応するエラーメッセージ文字列を返す |
| `char* uv_strerror_r(int err, char* buf, size_t buflen)` | エラーメッセージをユーザー提供バッファに書き込む（スレッドセーフ） |
| `const char* uv_err_name(int err)` | エラーコード名を文字列で返す |
| `char* uv_err_name_r(int err, char* buf, size_t buflen)` | エラーコード名をユーザー提供バッファに書き込む（スレッドセーフ） |
| `int uv_translate_sys_error(int sys_errno)` | プラットフォーム依存のエラーコードを libuv エラーコードに変換する |

### 設計パターン

libuv の API は以下の2つの基本概念に基づいている:

- **ハンドル (Handle)**: 長期間存続するオブジェクト。TCP サーバ、タイマー、シグナルウォッチャーなどがこれに該当する。すべてのハンドルは `uv_handle_t` を基底型とする。
- **リクエスト (Request)**: 短期間の操作を表すオブジェクト。Write リクエスト、DNS クエリ、ファイル操作などがこれに該当する。すべてのリクエストは `uv_req_t` を基底型とする。

### コールバック型一覧

| コールバック型 | シグネチャ | 用途 |
| --- | --- | --- |
| `uv_alloc_cb` | `void (*)(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf)` | バッファ割り当て |
| `uv_read_cb` | `void (*)(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf)` | ストリーム読み取り完了 |
| `uv_write_cb` | `void (*)(uv_write_t* req, int status)` | ストリーム書き込み完了 |
| `uv_connect_cb` | `void (*)(uv_connect_t* req, int status)` | 接続完了 |
| `uv_shutdown_cb` | `void (*)(uv_shutdown_t* req, int status)` | シャットダウン完了 |
| `uv_connection_cb` | `void (*)(uv_stream_t* server, int status)` | 新規接続受け入れ |
| `uv_close_cb` | `void (*)(uv_handle_t* handle)` | ハンドルクローズ完了 |
| `uv_poll_cb` | `void (*)(uv_poll_t* handle, int status, int events)` | ポーリングイベント |
| `uv_timer_cb` | `void (*)(uv_timer_t* handle)` | タイマー発火 |
| `uv_async_cb` | `void (*)(uv_async_t* handle)` | 非同期通知 |
| `uv_prepare_cb` | `void (*)(uv_prepare_t* handle)` | Prepare フェーズ |
| `uv_check_cb` | `void (*)(uv_check_t* handle)` | Check フェーズ |
| `uv_idle_cb` | `void (*)(uv_idle_t* handle)` | Idle フェーズ |
| `uv_exit_cb` | `void (*)(uv_process_t*, int64_t exit_status, int term_signal)` | プロセス終了 |
| `uv_walk_cb` | `void (*)(uv_handle_t* handle, void* arg)` | ハンドル列挙 |
| `uv_fs_cb` | `void (*)(uv_fs_t* req)` | ファイルシステム操作完了 |
| `uv_work_cb` | `void (*)(uv_work_t* req)` | スレッドプール作業実行 |
| `uv_after_work_cb` | `void (*)(uv_work_t* req, int status)` | スレッドプール作業完了 |
| `uv_getaddrinfo_cb` | `void (*)(uv_getaddrinfo_t* req, int status, struct addrinfo* res)` | DNS 名前解決完了 |
| `uv_getnameinfo_cb` | `void (*)(uv_getnameinfo_t* req, int status, const char* hostname, const char* service)` | DNS 逆引き完了 |
| `uv_random_cb` | `void (*)(uv_random_t* req, int status, void* buf, size_t buflen)` | 乱数生成完了 |
| `uv_fs_event_cb` | `void (*)(uv_fs_event_t* handle, const char* filename, int events, int status)` | ファイルシステムイベント |
| `uv_fs_poll_cb` | `void (*)(uv_fs_poll_t* handle, int status, const uv_stat_t* prev, const uv_stat_t* curr)` | ファイルシステムポーリング |
| `uv_signal_cb` | `void (*)(uv_signal_t* handle, int signum)` | シグナル受信 |
| `uv_udp_send_cb` | `void (*)(uv_udp_send_t* req, int status)` | UDP 送信完了 |
| `uv_udp_recv_cb` | `void (*)(uv_udp_t* handle, ssize_t nread, const uv_buf_t* buf, const struct sockaddr* addr, unsigned flags)` | UDP 受信 |
| `uv_thread_cb` | `void (*)(void* arg)` | スレッドエントリポイント |

## API一覧

| カテゴリ | 関数名 | 説明 |
| --- | --- | --- |
| バージョン | `uv_version` | バージョン番号取得 |
| バージョン | `uv_version_string` | バージョン文字列取得 |
| イベントループ | `uv_loop_init` | ループ初期化 |
| イベントループ | `uv_loop_configure` | ループオプション設定 |
| イベントループ | `uv_loop_close` | ループクローズ |
| イベントループ | `uv_default_loop` | デフォルトループ取得 |
| イベントループ | `uv_run` | ループ実行 |
| イベントループ | `uv_loop_alive` | ループ活性確認 |
| イベントループ | `uv_stop` | ループ停止 |
| イベントループ | `uv_loop_size` | ループ構造体サイズ取得 |
| イベントループ | `uv_loop_fork` | fork 後のループ再初期化 |
| イベントループ | `uv_backend_fd` | バックエンド FD 取得 |
| イベントループ | `uv_backend_timeout` | バックエンドタイムアウト取得 |
| イベントループ | `uv_now` | 現在時刻取得（ミリ秒） |
| イベントループ | `uv_update_time` | 時刻キャッシュ更新 |
| イベントループ | `uv_walk` | ハンドル列挙 |
| ハンドル | `uv_is_active` | ハンドルがアクティブか確認 |
| ハンドル | `uv_is_closing` | ハンドルがクローズ中か確認 |
| ハンドル | `uv_close` | ハンドルクローズ要求 |
| ハンドル | `uv_ref` | 参照カウント増加 |
| ハンドル | `uv_unref` | 参照カウント減少 |
| ハンドル | `uv_has_ref` | 参照カウント確認 |
| ハンドル | `uv_handle_size` | ハンドルサイズ取得 |
| ハンドル | `uv_send_buffer_size` | 送信バッファサイズ設定/取得 |
| ハンドル | `uv_recv_buffer_size` | 受信バッファサイズ設定/取得 |
| ハンドル | `uv_fileno` | ファイルディスクリプタ取得 |
| ハンドル | `uv_handle_get_type` | ハンドルタイプ取得 |
| ハンドル | `uv_handle_type_name` | ハンドルタイプ名取得 |
| ハンドル | `uv_handle_get_data` | ユーザーデータ取得 |
| ハンドル | `uv_handle_set_data` | ユーザーデータ設定 |
| ハンドル | `uv_handle_get_loop` | ループ取得 |
| リクエスト | `uv_cancel` | リクエストキャンセル |
| リクエスト | `uv_req_size` | リクエストサイズ取得 |
| リクエスト | `uv_req_get_data` | ユーザーデータ取得 |
| リクエスト | `uv_req_set_data` | ユーザーデータ設定 |
| リクエスト | `uv_req_get_type` | リクエストタイプ取得 |
| リクエスト | `uv_req_type_name` | リクエストタイプ名取得 |
| タイマー | `uv_timer_init` | タイマー初期化 |
| タイマー | `uv_timer_start` | タイマー開始 |
| タイマー | `uv_timer_stop` | タイマー停止 |
| タイマー | `uv_timer_again` | タイマー再開始 |
| タイマー | `uv_timer_set_repeat` | リピート間隔設定 |
| タイマー | `uv_timer_get_repeat` | リピート間隔取得 |
| タイマー | `uv_timer_get_due_in` | 次回発火までの時間取得 |
| Prepare/Check/Idle | `uv_prepare_init` | Prepare ハンドル初期化 |
| Prepare/Check/Idle | `uv_prepare_start` | Prepare 開始 |
| Prepare/Check/Idle | `uv_prepare_stop` | Prepare 停止 |
| Prepare/Check/Idle | `uv_check_init` | Check ハンドル初期化 |
| Prepare/Check/Idle | `uv_check_start` | Check 開始 |
| Prepare/Check/Idle | `uv_check_stop` | Check 停止 |
| Prepare/Check/Idle | `uv_idle_init` | Idle ハンドル初期化 |
| Prepare/Check/Idle | `uv_idle_start` | Idle 開始 |
| Prepare/Check/Idle | `uv_idle_stop` | Idle 停止 |
| 非同期 | `uv_async_init` | Async ハンドル初期化 |
| 非同期 | `uv_async_send` | 非同期通知送信 |
| ストリーム | `uv_shutdown` | 送信側シャットダウン |
| ストリーム | `uv_listen` | リッスン開始 |
| ストリーム | `uv_accept` | 接続受け入れ |
| ストリーム | `uv_read_start` | 読み取り開始 |
| ストリーム | `uv_read_stop` | 読み取り停止 |
| ストリーム | `uv_write` | データ書き込み |
| ストリーム | `uv_write2` | ハンドル送信付きデータ書き込み |
| ストリーム | `uv_try_write` | ノンブロッキング書き込み |
| ストリーム | `uv_try_write2` | ノンブロッキング書き込み（ハンドル送信付き） |
| ストリーム | `uv_is_readable` | 読み取り可能確認 |
| ストリーム | `uv_is_writable` | 書き込み可能確認 |
| ストリーム | `uv_stream_set_blocking` | ブロッキングモード設定 |
| ストリーム | `uv_stream_get_write_queue_size` | 書き込みキューサイズ取得 |
| TCP | `uv_tcp_init` | TCP ハンドル初期化 |
| TCP | `uv_tcp_init_ex` | TCP ハンドル拡張初期化 |
| TCP | `uv_tcp_open` | 既存ソケットをオープン |
| TCP | `uv_tcp_nodelay` | TCP_NODELAY 設定 |
| TCP | `uv_tcp_keepalive` | キープアライブ設定 |
| TCP | `uv_tcp_keepalive_ex` | 詳細キープアライブ設定 |
| TCP | `uv_tcp_simultaneous_accepts` | 同時受け入れ設定 |
| TCP | `uv_tcp_bind` | アドレスバインド |
| TCP | `uv_tcp_getsockname` | バインドアドレス取得 |
| TCP | `uv_tcp_getpeername` | ピアアドレス取得 |
| TCP | `uv_tcp_connect` | TCP 接続 |
| TCP | `uv_tcp_close_reset` | RST による接続リセット |
| UDP | `uv_udp_init` | UDP ハンドル初期化 |
| UDP | `uv_udp_init_ex` | UDP ハンドル拡張初期化 |
| UDP | `uv_udp_open` | 既存ソケットをオープン |
| UDP | `uv_udp_open_ex` | 既存ソケット拡張オープン |
| UDP | `uv_udp_bind` | アドレスバインド |
| UDP | `uv_udp_connect` | UDP 接続（宛先固定） |
| UDP | `uv_udp_getpeername` | ピアアドレス取得 |
| UDP | `uv_udp_getsockname` | バインドアドレス取得 |
| UDP | `uv_udp_set_membership` | マルチキャストグループ参加/離脱 |
| UDP | `uv_udp_set_source_membership` | ソース固有マルチキャスト参加/離脱 |
| UDP | `uv_udp_set_multicast_loop` | マルチキャストループ設定 |
| UDP | `uv_udp_set_multicast_ttl` | マルチキャスト TTL 設定 |
| UDP | `uv_udp_set_multicast_interface` | マルチキャストインタフェース設定 |
| UDP | `uv_udp_set_broadcast` | ブロードキャスト設定 |
| UDP | `uv_udp_set_ttl` | TTL 設定 |
| UDP | `uv_udp_send` | データ送信 |
| UDP | `uv_udp_try_send` | ノンブロッキング送信 |
| UDP | `uv_udp_try_send2` | バッチノンブロッキング送信 |
| UDP | `uv_udp_recv_start` | 受信開始 |
| UDP | `uv_udp_recv_stop` | 受信停止 |
| UDP | `uv_udp_using_recvmmsg` | recvmmsg 使用確認 |
| UDP | `uv_udp_get_send_queue_size` | 送信キューサイズ取得 |
| UDP | `uv_udp_get_send_queue_count` | 送信キューカウント取得 |
| パイプ | `uv_pipe_init` | パイプハンドル初期化 |
| パイプ | `uv_pipe_open` | 既存 FD をオープン |
| パイプ | `uv_pipe_bind` | パイプバインド |
| パイプ | `uv_pipe_bind2` | パイプ拡張バインド |
| パイプ | `uv_pipe_connect` | パイプ接続 |
| パイプ | `uv_pipe_connect2` | パイプ拡張接続 |
| パイプ | `uv_pipe_getsockname` | ソケット名取得 |
| パイプ | `uv_pipe_getpeername` | ピアソケット名取得 |
| パイプ | `uv_pipe_pending_instances` | 待機インスタンス数設定 |
| パイプ | `uv_pipe_pending_count` | 待機ハンドル数取得 |
| パイプ | `uv_pipe_pending_type` | 待機ハンドルタイプ取得 |
| パイプ | `uv_pipe_chmod` | パーミッション変更 |
| パイプ | `uv_pipe` | パイプペア作成 |
| TTY | `uv_tty_init` | TTY ハンドル初期化 |
| TTY | `uv_tty_set_mode` | TTY モード設定 |
| TTY | `uv_tty_reset_mode` | TTY モードリセット |
| TTY | `uv_tty_get_winsize` | ウィンドウサイズ取得 |
| TTY | `uv_tty_set_vterm_state` | 仮想ターミナル状態設定 |
| TTY | `uv_tty_get_vterm_state` | 仮想ターミナル状態取得 |
| ポーリング | `uv_poll_init` | ポーリングハンドル初期化（FD） |
| ポーリング | `uv_poll_init_socket` | ポーリングハンドル初期化（ソケット） |
| ポーリング | `uv_poll_start` | ポーリング開始 |
| ポーリング | `uv_poll_stop` | ポーリング停止 |
| シグナル | `uv_signal_init` | シグナルハンドル初期化 |
| シグナル | `uv_signal_start` | シグナル監視開始 |
| シグナル | `uv_signal_start_oneshot` | ワンショットシグナル監視開始 |
| シグナル | `uv_signal_stop` | シグナル監視停止 |
| プロセス | `uv_spawn` | プロセス起動 |
| プロセス | `uv_process_kill` | プロセスにシグナル送信 |
| プロセス | `uv_kill` | PID にシグナル送信 |
| プロセス | `uv_process_get_pid` | PID 取得 |
| ファイルシステム | `uv_fs_req_cleanup` | FS リクエストクリーンアップ |
| ファイルシステム | `uv_fs_open` | ファイルオープン |
| ファイルシステム | `uv_fs_close` | ファイルクローズ |
| ファイルシステム | `uv_fs_read` | ファイル読み取り |
| ファイルシステム | `uv_fs_write` | ファイル書き込み |
| ファイルシステム | `uv_fs_unlink` | ファイル削除 |
| ファイルシステム | `uv_fs_mkdir` | ディレクトリ作成 |
| ファイルシステム | `uv_fs_mkdtemp` | 一時ディレクトリ作成 |
| ファイルシステム | `uv_fs_mkstemp` | 一時ファイル作成 |
| ファイルシステム | `uv_fs_rmdir` | ディレクトリ削除 |
| ファイルシステム | `uv_fs_scandir` | ディレクトリスキャン |
| ファイルシステム | `uv_fs_scandir_next` | スキャン結果取得 |
| ファイルシステム | `uv_fs_opendir` | ディレクトリオープン |
| ファイルシステム | `uv_fs_readdir` | ディレクトリエントリ読み取り |
| ファイルシステム | `uv_fs_closedir` | ディレクトリクローズ |
| ファイルシステム | `uv_fs_stat` | ファイル情報取得 |
| ファイルシステム | `uv_fs_fstat` | FD からファイル情報取得 |
| ファイルシステム | `uv_fs_lstat` | シンボリックリンク情報取得 |
| ファイルシステム | `uv_fs_rename` | ファイルリネーム |
| ファイルシステム | `uv_fs_fsync` | ファイル同期 |
| ファイルシステム | `uv_fs_fdatasync` | データ同期 |
| ファイルシステム | `uv_fs_ftruncate` | ファイル切り詰め |
| ファイルシステム | `uv_fs_sendfile` | ファイル転送 |
| ファイルシステム | `uv_fs_access` | アクセス権確認 |
| ファイルシステム | `uv_fs_chmod` | パーミッション変更 |
| ファイルシステム | `uv_fs_fchmod` | FD パーミッション変更 |
| ファイルシステム | `uv_fs_utime` | タイムスタンプ変更 |
| ファイルシステム | `uv_fs_futime` | FD タイムスタンプ変更 |
| ファイルシステム | `uv_fs_lutime` | シンボリックリンクタイムスタンプ変更 |
| ファイルシステム | `uv_fs_link` | ハードリンク作成 |
| ファイルシステム | `uv_fs_symlink` | シンボリックリンク作成 |
| ファイルシステム | `uv_fs_readlink` | シンボリックリンク読み取り |
| ファイルシステム | `uv_fs_realpath` | 実パス解決 |
| ファイルシステム | `uv_fs_chown` | 所有権変更 |
| ファイルシステム | `uv_fs_fchown` | FD 所有権変更 |
| ファイルシステム | `uv_fs_lchown` | シンボリックリンク所有権変更 |
| ファイルシステム | `uv_fs_copyfile` | ファイルコピー |
| ファイルシステム | `uv_fs_statfs` | ファイルシステム統計 |
| FS イベント | `uv_fs_event_init` | FS イベントハンドル初期化 |
| FS イベント | `uv_fs_event_start` | FS イベント監視開始 |
| FS イベント | `uv_fs_event_stop` | FS イベント監視停止 |
| FS イベント | `uv_fs_event_getpath` | 監視パス取得 |
| FS ポーリング | `uv_fs_poll_init` | FS ポーリングハンドル初期化 |
| FS ポーリング | `uv_fs_poll_start` | FS ポーリング開始 |
| FS ポーリング | `uv_fs_poll_stop` | FS ポーリング停止 |
| FS ポーリング | `uv_fs_poll_getpath` | 監視パス取得 |
| DNS | `uv_getaddrinfo` | 非同期 DNS 名前解決 |
| DNS | `uv_freeaddrinfo` | addrinfo 解放 |
| DNS | `uv_getnameinfo` | 非同期 DNS 逆引き |
| スレッドプール | `uv_queue_work` | スレッドプール作業キュー |
| スレッド | `uv_thread_create` | スレッド作成 |
| スレッド | `uv_thread_create_ex` | スレッド拡張作成 |
| スレッド | `uv_thread_detach` | スレッドデタッチ |
| スレッド | `uv_thread_join` | スレッド待機 |
| スレッド | `uv_thread_self` | 現在スレッド取得 |
| スレッド | `uv_thread_equal` | スレッド比較 |
| スレッド | `uv_thread_setaffinity` | CPU アフィニティ設定 |
| スレッド | `uv_thread_getaffinity` | CPU アフィニティ取得 |
| スレッド | `uv_thread_getcpu` | 現在 CPU 番号取得 |
| スレッド | `uv_thread_setname` | スレッド名設定 |
| スレッド | `uv_thread_getname` | スレッド名取得 |
| スレッド | `uv_thread_setpriority` | スレッド優先度設定 |
| スレッド | `uv_thread_getpriority` | スレッド優先度取得 |
| 同期プリミティブ | `uv_mutex_init` | ミューテックス初期化 |
| 同期プリミティブ | `uv_mutex_init_recursive` | 再帰ミューテックス初期化 |
| 同期プリミティブ | `uv_mutex_destroy` | ミューテックス破棄 |
| 同期プリミティブ | `uv_mutex_lock` | ミューテックスロック |
| 同期プリミティブ | `uv_mutex_trylock` | ミューテックストライロック |
| 同期プリミティブ | `uv_mutex_unlock` | ミューテックスアンロック |
| 同期プリミティブ | `uv_rwlock_init` | 読み書きロック初期化 |
| 同期プリミティブ | `uv_rwlock_destroy` | 読み書きロック破棄 |
| 同期プリミティブ | `uv_rwlock_rdlock` | 読み取りロック |
| 同期プリミティブ | `uv_rwlock_tryrdlock` | トライ読み取りロック |
| 同期プリミティブ | `uv_rwlock_rdunlock` | 読み取りアンロック |
| 同期プリミティブ | `uv_rwlock_wrlock` | 書き込みロック |
| 同期プリミティブ | `uv_rwlock_trywrlock` | トライ書き込みロック |
| 同期プリミティブ | `uv_rwlock_wrunlock` | 書き込みアンロック |
| 同期プリミティブ | `uv_sem_init` | セマフォ初期化 |
| 同期プリミティブ | `uv_sem_destroy` | セマフォ破棄 |
| 同期プリミティブ | `uv_sem_post` | セマフォポスト |
| 同期プリミティブ | `uv_sem_wait` | セマフォ待機 |
| 同期プリミティブ | `uv_sem_trywait` | セマフォトライ待機 |
| 同期プリミティブ | `uv_cond_init` | 条件変数初期化 |
| 同期プリミティブ | `uv_cond_destroy` | 条件変数破棄 |
| 同期プリミティブ | `uv_cond_signal` | 条件変数シグナル |
| 同期プリミティブ | `uv_cond_broadcast` | 条件変数ブロードキャスト |
| 同期プリミティブ | `uv_cond_wait` | 条件変数待機 |
| 同期プリミティブ | `uv_cond_timedwait` | 条件変数タイムアウト付き待機 |
| 同期プリミティブ | `uv_barrier_init` | バリア初期化 |
| 同期プリミティブ | `uv_barrier_destroy` | バリア破棄 |
| 同期プリミティブ | `uv_barrier_wait` | バリア待機 |
| 同期プリミティブ | `uv_once` | ワンタイム初期化 |
| 同期プリミティブ | `uv_key_create` | TLS キー作成 |
| 同期プリミティブ | `uv_key_delete` | TLS キー削除 |
| 同期プリミティブ | `uv_key_get` | TLS 値取得 |
| 同期プリミティブ | `uv_key_set` | TLS 値設定 |
| ユーティリティ | `uv_buf_init` | バッファ初期化 |
| ユーティリティ | `uv_guess_handle` | FD タイプ推定 |
| ユーティリティ | `uv_replace_allocator` | メモリアロケータ置き換え |
| ユーティリティ | `uv_library_shutdown` | ライブラリシャットダウン |
| ユーティリティ | `uv_socketpair` | ソケットペア作成 |
| ユーティリティ | `uv_disable_stdio_inheritance` | stdio 継承無効化 |
| ユーティリティ | `uv_random` | 乱数生成 |
| ネットワークユーティリティ | `uv_ip4_addr` | IPv4 アドレス変換（文字列→バイナリ） |
| ネットワークユーティリティ | `uv_ip6_addr` | IPv6 アドレス変換（文字列→バイナリ） |
| ネットワークユーティリティ | `uv_ip4_name` | IPv4 アドレス変換（バイナリ→文字列） |
| ネットワークユーティリティ | `uv_ip6_name` | IPv6 アドレス変換（バイナリ→文字列） |
| ネットワークユーティリティ | `uv_ip_name` | IP アドレス変換（汎用） |
| ネットワークユーティリティ | `uv_inet_ntop` | ネットワーク→表示形式変換 |
| ネットワークユーティリティ | `uv_inet_pton` | 表示形式→ネットワーク変換 |
| ネットワークユーティリティ | `uv_if_indextoname` | インタフェースインデックス→名前変換 |
| ネットワークユーティリティ | `uv_if_indextoiid` | インタフェースインデックス→IID 変換 |
| DLL | `uv_dlopen` | 共有ライブラリロード |
| DLL | `uv_dlclose` | 共有ライブラリクローズ |
| DLL | `uv_dlsym` | シンボル検索 |
| DLL | `uv_dlerror` | DLL エラーメッセージ取得 |
| システム情報 | `uv_setup_args` | プロセス引数保存 |
| システム情報 | `uv_get_process_title` | プロセスタイトル取得 |
| システム情報 | `uv_set_process_title` | プロセスタイトル設定 |
| システム情報 | `uv_resident_set_memory` | RSS 取得 |
| システム情報 | `uv_uptime` | システムアップタイム取得 |
| システム情報 | `uv_getrusage` | リソース使用量取得 |
| システム情報 | `uv_getrusage_thread` | スレッドリソース使用量取得 |
| システム情報 | `uv_cpu_info` | CPU 情報取得 |
| システム情報 | `uv_free_cpu_info` | CPU 情報解放 |
| システム情報 | `uv_cpumask_size` | CPU マスクサイズ取得 |
| システム情報 | `uv_interface_addresses` | ネットワークインタフェース情報取得 |
| システム情報 | `uv_free_interface_addresses` | インタフェース情報解放 |
| システム情報 | `uv_loadavg` | ロードアベレージ取得 |
| システム情報 | `uv_get_free_memory` | 空きメモリ取得 |
| システム情報 | `uv_get_total_memory` | 総メモリ取得 |
| システム情報 | `uv_get_constrained_memory` | 制限メモリ取得 |
| システム情報 | `uv_get_available_memory` | 利用可能メモリ取得 |
| システム情報 | `uv_os_homedir` | ホームディレクトリ取得 |
| システム情報 | `uv_os_tmpdir` | 一時ディレクトリ取得 |
| システム情報 | `uv_os_get_passwd` | パスワード情報取得 |
| システム情報 | `uv_os_free_passwd` | パスワード情報解放 |
| システム情報 | `uv_os_get_passwd2` | UID 指定でパスワード情報取得 |
| システム情報 | `uv_os_get_group` | グループ情報取得 |
| システム情報 | `uv_os_free_group` | グループ情報解放 |
| システム情報 | `uv_os_getpid` | プロセス ID 取得 |
| システム情報 | `uv_os_getppid` | 親プロセス ID 取得 |
| システム情報 | `uv_os_getpriority` | プロセス優先度取得 |
| システム情報 | `uv_os_setpriority` | プロセス優先度設定 |
| システム情報 | `uv_os_environ` | 環境変数一覧取得 |
| システム情報 | `uv_os_free_environ` | 環境変数一覧解放 |
| システム情報 | `uv_os_getenv` | 環境変数取得 |
| システム情報 | `uv_os_setenv` | 環境変数設定 |
| システム情報 | `uv_os_unsetenv` | 環境変数削除 |
| システム情報 | `uv_os_gethostname` | ホスト名取得 |
| システム情報 | `uv_os_uname` | システム情報取得 |
| システム情報 | `uv_exepath` | 実行ファイルパス取得 |
| システム情報 | `uv_cwd` | 現在作業ディレクトリ取得 |
| システム情報 | `uv_chdir` | 作業ディレクトリ変更 |
| システム情報 | `uv_get_osfhandle` | OS ファイルハンドル取得 |
| システム情報 | `uv_open_osfhandle` | OS ファイルハンドルオープン |
| 時刻 | `uv_clock_gettime` | 高精度クロック取得 |
| 時刻 | `uv_hrtime` | 高分解能タイマー取得（ナノ秒） |
| 時刻 | `uv_gettimeofday` | 現在時刻取得 |
| 時刻 | `uv_sleep` | スリープ |
| メトリクス | `uv_metrics_info` | メトリクス情報取得 |
| メトリクス | `uv_metrics_idle_time` | アイドル時間取得 |
| FS アクセサ | `uv_fs_get_type` | FS 操作タイプ取得 |
| FS アクセサ | `uv_fs_get_result` | FS 操作結果取得 |
| FS アクセサ | `uv_fs_get_system_error` | FS システムエラー取得 |
| FS アクセサ | `uv_fs_get_ptr` | FS 結果ポインタ取得 |
| FS アクセサ | `uv_fs_get_path` | FS 対象パス取得 |
| FS アクセサ | `uv_fs_get_statbuf` | FS stat バッファ取得 |
| Unicode | `uv_utf16_length_as_wtf8` | UTF-16 の WTF-8 長さ算出 |
| Unicode | `uv_utf16_to_wtf8` | UTF-16 → WTF-8 変換 |
| Unicode | `uv_wtf8_length_as_utf16` | WTF-8 の UTF-16 長さ算出 |
| Unicode | `uv_wtf8_to_utf16` | WTF-8 → UTF-16 変換 |
| デバッグ | `uv_print_all_handles` | 全ハンドルを出力 |
| デバッグ | `uv_print_active_handles` | アクティブハンドルを出力 |

## 各API定義

### イベントループ

#### 1. uv_loop_init

イベントループを初期化する。使用前に必ず呼び出す必要がある。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_loop_init(uv_loop_t* loop)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:291` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | 初期化するループ構造体のポインタ |

---

#### 2. uv_loop_configure

ループの追加オプションを設定する。ループを実行する前に呼び出す必要がある。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...)` |
| 戻り値 | 成功時 `0`、エラー時 `UV_EINVAL` 等 |
| 定義元 | `include/uv.h:307` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | 設定対象ループ |
| option | `uv_loop_option` | ○ | 設定オプション（`UV_LOOP_BLOCK_SIGNAL`, `UV_METRICS_IDLE_TIME`, `UV_LOOP_USE_IO_URING_SQPOLL`） |
| ... | 可変引数 | - | オプションに応じた追加引数 |

---

#### 3. uv_loop_close

イベントループをクローズし、内部リソースを解放する。すべてのハンドルをクローズしてからでないと `UV_EBUSY` を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_loop_close(uv_loop_t* loop)` |
| 戻り値 | 成功時 `0`、ハンドルが残存している場合 `UV_EBUSY` |
| 定義元 | `include/uv.h:292` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | クローズするループ |

---

#### 4. uv_default_loop

デフォルトのイベントループを取得する。初回呼び出し時に自動的に初期化される。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `uv_loop_t* uv_default_loop(void)` |
| 戻り値 | デフォルトループへのポインタ、失敗時 `NULL` |
| 定義元 | `include/uv.h:290` |

---

#### 5. uv_run

イベントループを実行する。モードに応じて動作が異なる。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_run(uv_loop_t* loop, uv_run_mode mode)` |
| 戻り値 | `UV_RUN_DEFAULT`: アクティブなハンドルがなくなった時 `0`。`UV_RUN_ONCE`/`UV_RUN_NOWAIT`: まだアクティブなハンドルがあれば非ゼロ |
| 定義元 | `include/uv.h:310` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | 実行するループ |
| mode | `uv_run_mode` | ○ | 実行モード: `UV_RUN_DEFAULT`（すべて処理）, `UV_RUN_ONCE`（1回ポーリング）, `UV_RUN_NOWAIT`（ノンブロッキング） |

---

#### 6. uv_stop

イベントループの実行を停止する。現在のイテレーション終了後に `uv_run` から戻る。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `void uv_stop(uv_loop_t* loop)` |
| 戻り値 | なし |
| 定義元 | `include/uv.h:311` |

---

#### 7. uv_now

ループのキャッシュされた現在時刻をミリ秒単位で返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `uint64_t uv_now(const uv_loop_t* loop)` |
| 戻り値 | ミリ秒単位のタイムスタンプ |
| 定義元 | `include/uv.h:318` |

---

### ストリーム

#### 8. uv_listen

ストリームで新規接続を待ち受ける。TCP サーバやパイプサーバで使用する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:542` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| stream | `uv_stream_t*` | ○ | リッスンするストリーム（TCP or パイプ） |
| backlog | `int` | ○ | カーネルキューの最大接続数 |
| cb | `uv_connection_cb` | ○ | 新規接続受信時のコールバック |

---

#### 9. uv_accept

新規接続を受け入れる。`uv_connection_cb` コールバック内で呼び出す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_accept(uv_stream_t* server, uv_stream_t* client)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:543` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| server | `uv_stream_t*` | ○ | リッスン中のサーバハンドル |
| client | `uv_stream_t*` | ○ | 初期化済みのクライアントハンドル（接続が割り当てられる） |

---

#### 10. uv_read_start

ストリームからの読み取りを開始する。データ到着時にコールバックが呼ばれる。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:545` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| stream | `uv_stream_t*` | ○ | 読み取り対象ストリーム |
| alloc_cb | `uv_alloc_cb` | ○ | バッファ割り当てコールバック |
| read_cb | `uv_read_cb` | ○ | データ読み取りコールバック（`nread` < 0 はエラー、`UV_EOF` は終端） |

---

#### 11. uv_write

ストリームにデータを非同期で書き込む。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_write(uv_write_t* req, uv_stream_t* handle, const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:550` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| req | `uv_write_t*` | ○ | 書き込みリクエスト |
| handle | `uv_stream_t*` | ○ | 書き込み対象ストリーム |
| bufs | `const uv_buf_t[]` | ○ | 書き込みバッファ配列 |
| nbufs | `unsigned int` | ○ | バッファ数 |
| cb | `uv_write_cb` | ○ | 書き込み完了コールバック |

---

### TCP

#### 12. uv_tcp_init

TCP ハンドルを初期化する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:598` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| handle | `uv_tcp_t*` | ○ | 初期化する TCP ハンドル |

---

#### 13. uv_tcp_bind

TCP ハンドルをアドレスにバインドする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr* addr, unsigned int flags)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:628` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| handle | `uv_tcp_t*` | ○ | TCP ハンドル |
| addr | `const struct sockaddr*` | ○ | バインド先アドレス（IPv4 または IPv6） |
| flags | `unsigned int` | ○ | フラグ: `UV_TCP_IPV6ONLY`（IPv6 のみ）, `UV_TCP_REUSEPORT`（ポート再利用） |

---

#### 14. uv_tcp_connect

TCP 接続を確立する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, const struct sockaddr* addr, uv_connect_cb cb)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:638` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| req | `uv_connect_t*` | ○ | 接続リクエスト |
| handle | `uv_tcp_t*` | ○ | TCP ハンドル |
| addr | `const struct sockaddr*` | ○ | 接続先アドレス |
| cb | `uv_connect_cb` | ○ | 接続完了コールバック |

---

### UDP

#### 15. uv_udp_init

UDP ハンドルを初期化する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:744` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| handle | `uv_udp_t*` | ○ | 初期化する UDP ハンドル |

---

#### 16. uv_udp_send

UDP データグラムを非同期送信する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, const uv_buf_t bufs[], unsigned int nbufs, const struct sockaddr* addr, uv_udp_send_cb send_cb)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:776` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| req | `uv_udp_send_t*` | ○ | 送信リクエスト |
| handle | `uv_udp_t*` | ○ | UDP ハンドル |
| bufs | `const uv_buf_t[]` | ○ | 送信バッファ配列 |
| nbufs | `unsigned int` | ○ | バッファ数 |
| addr | `const struct sockaddr*` | ○ | 宛先アドレス（`uv_udp_connect` 済みの場合は `NULL` 可） |
| send_cb | `uv_udp_send_cb` | ○ | 送信完了コールバック |

---

#### 17. uv_udp_recv_start

UDP データグラムの受信を開始する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:792` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| handle | `uv_udp_t*` | ○ | UDP ハンドル |
| alloc_cb | `uv_alloc_cb` | ○ | バッファ割り当てコールバック |
| recv_cb | `uv_udp_recv_cb` | ○ | 受信コールバック |

---

### パイプ

#### 18. uv_pipe_init

パイプハンドルを初期化する。Unix ドメインソケット（Unix）または名前付きパイプ（Windows）。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:875` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| handle | `uv_pipe_t*` | ○ | 初期化するパイプハンドル |
| ipc | `int` | ○ | プロセス間ハンドル送信に使用する場合は非ゼロ |

---

### タイマー

#### 19. uv_timer_init

タイマーハンドルを初期化する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:976` |

---

#### 20. uv_timer_start

タイマーを開始する。`timeout` ミリ秒後にコールバックが呼ばれ、`repeat` が非ゼロの場合は繰り返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_timer_start(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:977` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| handle | `uv_timer_t*` | ○ | タイマーハンドル |
| cb | `uv_timer_cb` | ○ | タイマー発火コールバック |
| timeout | `uint64_t` | ○ | 初回発火までの時間（ミリ秒） |
| repeat | `uint64_t` | ○ | 繰り返し間隔（ミリ秒、0 で1回のみ） |

---

### ファイルシステム

#### 21. uv_fs_open

ファイルを非同期でオープンする。`cb` が `NULL` の場合は同期実行。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb)` |
| 戻り値 | 同期時: ファイルディスクリプタ（成功）または負のエラーコード。非同期時: `0` |
| 定義元 | `include/uv.h:1474` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| req | `uv_fs_t*` | ○ | FS リクエスト |
| path | `const char*` | ○ | ファイルパス |
| flags | `int` | ○ | オープンフラグ（`O_RDONLY`, `O_WRONLY`, `O_CREAT` 等） |
| mode | `int` | ○ | パーミッションモード |
| cb | `uv_fs_cb` | - | 完了コールバック（`NULL` で同期実行） |

---

#### 22. uv_fs_read

ファイルからデータを非同期で読み取る。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t offset, uv_fs_cb cb)` |
| 戻り値 | 同期時: 読み取りバイト数（成功）または負のエラーコード。非同期時: `0` |
| 定義元 | `include/uv.h:1480` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| req | `uv_fs_t*` | ○ | FS リクエスト |
| file | `uv_file` | ○ | ファイルディスクリプタ |
| bufs | `const uv_buf_t[]` | ○ | 読み取りバッファ配列 |
| nbufs | `unsigned int` | ○ | バッファ数 |
| offset | `int64_t` | ○ | 読み取り開始位置（`-1` で現在位置） |
| cb | `uv_fs_cb` | - | 完了コールバック（`NULL` で同期実行） |

---

#### 23. uv_fs_write

ファイルにデータを非同期で書き込む。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t offset, uv_fs_cb cb)` |
| 戻り値 | 同期時: 書き込みバイト数（成功）または負のエラーコード。非同期時: `0` |
| 定義元 | `include/uv.h:1491` |

---

#### 24. uv_fs_stat

ファイルの状態情報を取得する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)` |
| 戻り値 | 同期時: `0`（成功）または負のエラーコード。非同期時: `0` |
| 定義元 | `include/uv.h:1558` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| req | `uv_fs_t*` | ○ | FS リクエスト（結果は `req->statbuf` に格納） |
| path | `const char*` | ○ | 対象ファイルパス |
| cb | `uv_fs_cb` | - | 完了コールバック（`NULL` で同期実行） |

---

### DNS

#### 25. uv_getaddrinfo

非同期 DNS 名前解決を実行する。`cb` が `NULL` の場合は同期実行。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_getaddrinfo(uv_loop_t* loop, uv_getaddrinfo_t* req, uv_getaddrinfo_cb getaddrinfo_cb, const char* node, const char* service, const struct addrinfo* hints)` |
| 戻り値 | 同期時: `0`（成功）または負のエラーコード。非同期時: `0` |
| 定義元 | `include/uv.h:1002` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| req | `uv_getaddrinfo_t*` | ○ | DNS リクエスト |
| getaddrinfo_cb | `uv_getaddrinfo_cb` | - | 完了コールバック（`NULL` で同期実行） |
| node | `const char*` | - | ホスト名（`NULL` 可） |
| service | `const char*` | - | サービス名またはポート番号（`NULL` 可） |
| hints | `const struct addrinfo*` | - | 解決ヒント（`NULL` 可） |

---

#### 26. uv_getnameinfo

非同期 DNS 逆引きを実行する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_getnameinfo(uv_loop_t* loop, uv_getnameinfo_t* req, uv_getnameinfo_cb getnameinfo_cb, const struct sockaddr* addr, int flags)` |
| 戻り値 | 同期時: `0`（成功）または負のエラーコード。非同期時: `0` |
| 定義元 | `include/uv.h:1024` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| req | `uv_getnameinfo_t*` | ○ | DNS リクエスト |
| getnameinfo_cb | `uv_getnameinfo_cb` | - | 完了コールバック（`NULL` で同期実行） |
| addr | `const struct sockaddr*` | ○ | 逆引き対象アドレス |
| flags | `int` | ○ | フラグ（`NI_NAMEREQD`, `NI_NUMERICHOST` 等） |

---

### プロセス

#### 27. uv_spawn

子プロセスを起動する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_spawn(uv_loop_t* loop, uv_process_t* handle, const uv_process_options_t* options)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:1176` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| handle | `uv_process_t*` | ○ | プロセスハンドル |
| options | `const uv_process_options_t*` | ○ | 起動オプション（実行ファイル、引数、環境変数、作業ディレクトリ、stdio 等） |

---

### シグナル

#### 28. uv_signal_start

シグナルの監視を開始する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:1728` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| handle | `uv_signal_t*` | ○ | シグナルハンドル |
| signal_cb | `uv_signal_cb` | ○ | シグナル受信コールバック |
| signum | `int` | ○ | 監視するシグナル番号（`SIGINT`, `SIGTERM` 等） |

---

### 非同期ハンドル

#### 29. uv_async_init

非同期ハンドルを初期化する。別スレッドからイベントループを起動するために使用する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_async_init(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:960` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| async | `uv_async_t*` | ○ | 非同期ハンドル |
| async_cb | `uv_async_cb` | - | 通知コールバック（`NULL` 可） |

---

#### 30. uv_async_send

イベントループに非同期通知を送信する。スレッドセーフかつシグナルセーフ。複数回呼び出しは合約される可能性がある。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_async_send(uv_async_t* async)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:963` |

---

### スレッドプール

#### 31. uv_queue_work

作業をスレッドプールにキューイングする。`work_cb` はスレッドプール上で実行され、完了後に `after_work_cb` がイベントループスレッドで呼ばれる。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:1195` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| req | `uv_work_t*` | ○ | ワークリクエスト |
| work_cb | `uv_work_cb` | ○ | スレッドプールで実行される関数 |
| after_work_cb | `uv_after_work_cb` | ○ | 完了後にイベントループスレッドで呼ばれるコールバック |

---

### スレッド

#### 32. uv_thread_create

新しいスレッドを作成する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg)` |
| 戻り値 | 成功時 `0`、エラー時負のエラーコード |
| 定義元 | `include/uv.h:1894` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| tid | `uv_thread_t*` | ○ | スレッド ID（出力） |
| entry | `uv_thread_cb` | ○ | スレッドエントリ関数 |
| arg | `void*` | - | エントリ関数に渡す引数 |

---

### DLL

#### 33. uv_dlopen

共有ライブラリをロードする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_dlopen(const char* filename, uv_lib_t* lib)` |
| 戻り値 | 成功時 `0`、エラー時 `-1` |
| 定義元 | `include/uv.h:1842` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| filename | `const char*` | ○ | ライブラリファイルパス |
| lib | `uv_lib_t*` | ○ | ライブラリハンドル（出力） |

---

#### 34. uv_dlsym

共有ライブラリからシンボルを検索する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr)` |
| 戻り値 | 成功時 `0`、エラー時 `-1` |
| 定義元 | `include/uv.h:1844` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| lib | `uv_lib_t*` | ○ | ライブラリハンドル |
| name | `const char*` | ○ | シンボル名 |
| ptr | `void**` | ○ | シンボルアドレス（出力） |

---

### 乱数

#### 35. uv_random

暗号論的に安全な乱数を生成する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| 関数シグネチャ | `int uv_random(uv_loop_t* loop, uv_random_t* req, void* buf, size_t buflen, unsigned flags, uv_random_cb cb)` |
| 戻り値 | 同期時: `0`（成功）または負のエラーコード。非同期時: `0` |
| 定義元 | `include/uv.h:1803` |

**パラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| loop | `uv_loop_t*` | ○ | イベントループ |
| req | `uv_random_t*` | ○ | 乱数リクエスト |
| buf | `void*` | ○ | 乱数格納バッファ |
| buflen | `size_t` | ○ | バッファサイズ |
| flags | `unsigned` | ○ | 将来拡張用フラグ（現時点では `0` を指定） |
| cb | `uv_random_cb` | - | 完了コールバック（`NULL` で同期実行） |

## 備考

### プロジェクト情報

- **プロジェクト名**: libuv
- **バージョン**: 1.x (v1.50.0+)
- **言語**: C (ISO C11)
- **ライセンス**: MIT
- **公式ドキュメント**: https://docs.libuv.org/

### 注意事項

- libuv は HTTP/REST API ではなく、C 言語のプログラミング API（関数インタフェース）を提供するライブラリである。本ドキュメントはそのテンプレートをC APIに適応させたものである。
- すべての FS 関数は `cb` パラメータに `NULL` を渡すことで同期実行が可能。
- スレッドプールのデフォルトサイズは 4 で、環境変数 `UV_THREADPOOL_SIZE` で最大 1024 まで変更可能。
- `uv_loop_new` と `uv_loop_delete` は非推奨（DEPRECATED）であり、`uv_loop_init` / `uv_loop_close` + 手動メモリ管理を使用すること。
- Windows 上では、シグナル API は `SIGINT`, `SIGBREAK`, `SIGHUP`, `SIGWINCH` のエミュレーションのみサポートする。
