ホーム 主筆 その他ソフト その他情報 Syuhitu.org English

Windows関連

スクリーンセーバー作成法

半透明ウインドウの性能

bootfont.bin

キャビネット形式

ウインドウスタイルをいじる

Java製ソフトをServiceに登録する

イベントログにメッセージを出力する

コントロールパネルにアイコンを追加する

Solaris関連

OpenGL

Solaris設定

ディレクトリの読み込み

主筆プラグイン開発

Sun Studio 11

マルチスレッドでの開発

door

音を出す

Blade100の正しい虐め方

パッケージの作成

画像入出力

BMPファイル

ICOファイル

ANIファイル

JPEGファイル

減色アルゴリズム

減色アルゴリズムの並列化

その他アルゴリズムなど

自由軸回転

Base64

文字列操作

CPU利用率の取得

正規表現ライブラリ

メタボールを作る

メタボールを作る2

正規表現とNFA・DFA

C言語の構文解析

マルチスレッド開発の傾向と対策

door_info

関数プロトタイプ

int door_info(
    int d,
    struct door_info *info
);

必要なヘッダ

<door.h>

必要なライブラリ

-ldoor

解説

door_info関数は、doorディスクリプタに関する情報を返す。この関数はdに指定されたdoorの情報を取得し、door_info構造体に取得した情報を設定する。

door_info構造体は次に様に定義される。

typedef struct {
    pid_t       di_target;     /* doorサーバのpid */
    door_ptr_t  di_proc;       /* サーバの関数 */
    door_ptr_t  di_data;       /* doorが呼び出される時に使用されるcookie */
    door_attr_t di_attributes; /* doorの属性 */
    door_id_t   di_uniquifier; /* 全door間での一意なID */
} door_info;

di_targetにはdoorサーバのプロセスIDが設定される。また、doorサーバのプロセスが終了していた場合には-1が設定される。

di_attributesには、次の値の組み合わせが設定される。

DOOR_LOCAL doorディスクリプタは、このプロセス内のサービス手続きを参照している。
DOOR_UNREF このdoorを参照するディスクリプタが解放される時、それが最後の一つでない場合は、解放されるという通知が来ることを期待している
DOOR_UNREF_MULTI DOOR_UNREFに似ている。このdoorは、参照が解除された時の通知が複数回来ることを期待している。
DOOR_IS_UNREF 現在、このdoorを参照しているディスクリプタは一つしか存在しない。
DOOR_REFUSE_DESC このdoorは、door_call関数が呼び出された時に、引数にディスクリプタが指定されていた場合は、呼び出しを受け付けない。
DOOR_REVOKED このdoorディスクリプタは、無効化されたdoorを参照している。
DOOR_PRIVATE このdoorは分離されたサーバスレッドのプールを所有している。

di_procとdi_dataメンバは、サーバとクライアントでポインタのデータサイズが異なっていても共同で利用できるようにするため、void*よりもdoor_ptr_tを使用した方が良い。(例えば、クライアントが32ビットでサーバが64ビットという場合などがある。)

各doorはシステム間で一意な番号を持っている。これはdoor_create関数によってdoorが構築されたときに発番される。また、この番号はdi_uniquifierに設定される。

戻り値

成功した場合は0。

失敗した場合は-1が返され、errnoに値が設定される。

エラー値

EFAULT

引数のアドレスが不正なメモリ領域を参照している。

EBADF

dはdoorのディスクリプタではない。

このページの情報に間違いがあっても、俺は知らんぜ。

<< 「Solarisのdoorについて」に戻る