共有メモリを使用してパイプを実装しています。ライブラリではなく、ライブラリのみを記述して触れる必要がありmain()
ます。
問題が発生しました:
これがmain()
私のライブラリを使用する一部のユーザーのものであるとしましょうshared_memory_pipe.h
:
#include "shared_memory_pipe.h"
int main() {
int fd[2];
shared_memory_pipe(fd);
if (fork()) {
while(1) {}
}
shared_memory_close(fd[0]);
shared_memory_close(fd[1]);
}
この例では、子は両方の fd を閉じていますが、父親は無限ループに陥っており、自分の fd を決して閉じていません。この場合、私のパイプはまだ存在しているはずです (すべての書き込み fd が閉じられている場合、またはすべての読み取り fd が閉じられている場合、またはすべてが閉じられている場合と比較して、パイプは停止するはずです)。
前に言ったように、私はライブラリ ( shared_memory_pipe.h
) だけを書きます。では、ライブラリ内で、 afork()
が作成されているかどうかをどのように知ることができますか?
共有メモリ パイプへの読み取り/書き込みを終了する別のプロセスがあることをどのように知ることができるので、共有メモリ パイプを閉じるか閉じないかを知ることができますか?
とかそういうのがあったことを知っているコマンドを聞いたのですが、fork()
見つからず、わかりません。
ありがとうございます!さらに情報が必要な場合はお尋ねください。