uv_pipe_t — パイプハンドル

パイプハンドルは、Unixのストリーミングファイル(ローカルドメインソケット、パイプ、FIFOを含む)と、Windowsの名前付きパイプを抽象化します。

uv_pipe_tは、次の型の「サブクラス」です: uv_stream_t。

データ型

type uv_pipe_t

パイプハンドルの型です。

公開メンバー

int uv_pipe_t.ipc

このパイプがプロセス間のハンドル転送に適しているかを表します。このフラグを設定するのは、ハンドルを転送する接続済みパイプだけです。uv_acceptを呼び出す待ち受けパイプには設定しません。

関連項目

次の型のuv_stream_tメンバーも適用されます。

API

int uv_pipe_init(uv_loop_t *loop, uv_pipe_t *handle, int ipc)

パイプハンドルを初期化します。ipc引数は、このパイプをプロセス間のハンドル転送に使うかどうかを表す真偽値です。これにより、通信路上のバイト列が変わる可能性があります。このフラグを設定するのは、ハンドルを転送する接続済みパイプだけです。uv_acceptを呼び出す待ち受けパイプには設定しません。

int uv_pipe_open(uv_pipe_t *handle, uv_file file)

既存のファイル記述子またはHANDLEをパイプとして開きます。

バージョン1.2.1での変更: ファイル記述子を非ブロッキングモードに設定します。

注記

渡したファイル記述子やHANDLEの型は検査しませんが、有効なパイプを表している必要があります。

int uv_pipe_bind(uv_pipe_t *handle, const char *name)

パイプをファイルパス(Unix)または名前(Windows)にバインドします。

次の関数とは異なり、Linuxの抽象名前空間ソケットはサポートしません: uv_pipe_bind2()。

次の呼び出しの別名です: uv_pipe_bind2(handle, name, strlen(name), 0)。

注記

Unixのパスは、sizeof(sockaddr_un.sun_path)バイトで切り詰めます。通常は92〜108バイトです。

int uv_pipe_bind2(uv_pipe_t *handle, const char *name, size_t namelen, unsigned int flags)

パイプをファイルパス(Unix)または名前(Windows)にバインドします。

flagsは0またはUV_PIPE_NO_TRUNCATEでなければなりません。サポートしないフラグが指定された場合は、バインド操作を行わず、UV_EINVALを返します。

Linuxの抽象名前空間ソケットをサポートします。namelenには、先頭のヌルバイトを含め、末尾のヌルバイトは含めません。

バージョン1.46.0で追加。

注記

Unixのパスは、sizeof(sockaddr_un.sun_path)バイトで切り詰めます。通常は92〜108バイトです。ただし、UV_PIPE_NO_TRUNCATEフラグが指定されている場合は、切り詰めずにUV_EINVALエラーを返します。

void uv_pipe_connect(uv_connect_t *req, uv_pipe_t *handle, const char *name, uv_connect_cb cb)

UnixドメインソケットまたはWindowsの名前付きパイプに接続します。

次の関数とは異なり、Linuxの抽象名前空間ソケットはサポートしません: uv_pipe_connect2()。

次の呼び出しの別名です: uv_pipe_connect2(req, handle, name, strlen(name), 0, cb)。

注記

Unixのパスは、sizeof(sockaddr_un.sun_path)バイトで切り詰めます。通常は92〜108バイトです。

int uv_pipe_connect2(uv_connect_t *req, uv_pipe_t *handle, const char *name, size_t namelen, unsigned int flags, uv_connect_cb cb)

UnixドメインソケットまたはWindowsの名前付きパイプに接続します。

flagsは0またはUV_PIPE_NO_TRUNCATEでなければなりません。サポートしないフラグが指定された場合は、接続操作を行わず、UV_EINVALを返します。

Linuxの抽象名前空間ソケットをサポートします。namelenには、先頭のヌルバイトを含め、末尾のヌルバイトは含めません。

バージョン1.46.0で追加。

注記

Unixのパスは、sizeof(sockaddr_un.sun_path)バイトで切り詰めます。通常は92〜108バイトです。ただし、UV_PIPE_NO_TRUNCATEフラグが指定されている場合は、切り詰めずにUV_EINVALエラーを返します。

int uv_pipe_getsockname(const uv_pipe_t *handle, char *buffer, size_t *size)

Unixドメインソケットまたは名前付きパイプの名前を取得します。

事前に確保したバッファを渡す必要があります。sizeパラメーターはバッファの長さを保持し、出力時にはバッファへ書き込んだバイト数に設定します。バッファが十分な大きさでない場合は、UV_ENOBUFSを返し、lenには必要なサイズが入ります。

FreeBSDでは、Unixドメインソケットのパスは、sockaddr_un.sun_pathのサイズを超えられません。これは、このプラットフォームが、それより大きなSOCK_MAXADDRLENを定義していても同じです。

バージョン1.3.0での変更: 返す長さに終端ヌルバイトを含めなくなり、バッファもヌル終端しなくなりました。

int uv_pipe_getpeername(const uv_pipe_t *handle, char *buffer, size_t *size)

ハンドルが接続しているUnixドメインソケットまたは名前付きパイプの名前を取得します。

事前に確保したバッファを渡す必要があります。sizeパラメーターはバッファの長さを保持し、出力時にはバッファへ書き込んだバイト数に設定します。バッファが十分な大きさでない場合は、UV_ENOBUFSを返し、lenには必要なサイズが入ります。

バージョン1.3.0で追加。

void uv_pipe_pending_instances(uv_pipe_t *handle, int count)

パイプサーバーが接続を待っているときの、保留中のパイプインスタンスハンドル数を設定します。

注記

この設定はWindowsだけに適用されます。

int uv_pipe_pending_count(uv_pipe_t *handle)
uv_handle_type uv_pipe_pending_type(uv_pipe_t *handle)

IPCパイプ経由でハンドルを受信するために使います。

最初にuv_pipe_pending_count()を呼び出します。戻り値が0より大きい場合は、uv_pipe_pending_type()が返す型のハンドルを初期化してから、uv_accept(pipe, handle)を呼び出します。

関連項目

次の型のuv_stream_tAPI関数も適用されます。

int uv_pipe_chmod(uv_pipe_t *handle, int flags)

パイプのアクセス許可を変更し、別のユーザーが実行するプロセスからアクセスできるようにします。すべてのユーザーがパイプへ書き込む、または読み取ることを許可します。モードには、UV_WRITABLE、UV_READABLE、UV_WRITABLE | UV_READABLEのいずれかを指定できます。この関数はブロッキングです。

バージョン1.16.0で追加。

int uv_pipe(uv_file fds[2], int read_flags, int write_flags)

接続済みのパイプハンドルのペアを作成します。データはfds[1]へ書き込み、fds[0]から読み取れます。得られたハンドルは、uv_pipe_openへ渡したり、uv_spawnで使ったり、他の目的に使ったりできます。

次の値、flagsに指定できる値は、次のとおりです。

  • UV_NONBLOCK_PIPE: 指定したソケットハンドルを、OVERLAPPEDまたはFIONBIO/O_NONBLOCKのI/O用に開きます。libuvで使うハンドルでは推奨しますが、通常、他の用途では推奨しません。

次の関数、pipe(2)でO_CLOEXECフラグを設定した場合と同等です。

バージョン1.41.0で追加。