2

ライブラリ用のコンテナサーバーをCで書いています。

システム ライブラリ dl は、動的リンク ローダーとして、プログラミング インターフェイスの実装に使用されます。それがdlopen/dlsym関数です。

コントロールをコンテナー サーバーに戻すには、 と の両方returnexit使用できます。return大丈夫です。

ただし、exit()ユーザーのプログラムでは、コンテナー サーバーも終了します。

ユーザーのプログラムで終了をサポートするにはどうすればよいですか?

exit動的リンクローダーを呼び出しながら、関数をオーバーライドすることを考えています。

4

2 に答える 2

1

を呼び出す可能性のあるライブラリ関数を実行するための新しい子プロセスを作成する必要があるかもしれませんexit()。ライブラリ関数が呼び出されるexit()か戻ると、子プロセスが終了し、親プロセス (コンテナー サーバー) は子プロセスの終了に関する情報を取得します。

この場合、新しい子プロセスを開始する最も簡単な方法は、 を呼び出すことfork()です。system()この場合、 callを使用する必要はありません。

于 2013-03-04T06:43:35.313 に答える
1

ライブラリを作成しているだけなので、プロセスが呼び出すことなく単独で実行することはできません。

アプリケーションが終了するとすぐに、残念ながらライブラリの状態も失われます。

つまり、アプリケーションが終了した後も状態を維持したい場合は、おそらくこのライブラリを初期化する最初のプロセスであり、状態を維持する手段としてバックグラウンドで実行し続ける初期化デーモンを作成する必要があります。あなたのコンテナ。

また、このライブラリを使用してデーモンと他のクライアント プロセスとの間で状態が伝達されるようにするには、セマフォまたは何らかの形式の IPC を使用する必要があります。

于 2013-03-04T06:30:23.810 に答える