私はLinuxデーモンに取り組んでおり、stdin/stdoutに関するいくつかの問題があります。通常、デーモンの性質上、標準入力や標準出力はありません。しかし、デーモンが正常に動作するために必要なさまざまなパラメーターを指定するためにデーモンが初めて実行されたときに呼び出されるデーモンには関数があります。この関数が呼び出されると、ターミナルは非常に遅くなって別のシェルを起動し、応答の速いプロンプトを得るためにデーモンを一番上に置かなければなりません。今私はこれがstdin/stdoutを閉じるフォークプロセスと関係があると考えていますが、私はこれを回避する方法についてはあまりよく分かりません。もしあなたが、状況に少しでも光を当てれば、それは最も高く評価されるでしょう。ありがとう。LinuxデーモンとSTDIN/STDOUT
編集:
int main(argc, char *argv[]) {
/* setup signal handling */
/* check command line arguments */
pid_t pid, sid;
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
if(pid > 0){
exit(EXIT_SUCCESS);
}
sid = setsid();
if(sid < 0) {
exit(EXIT_FAILURE);
}
umask(027);
/* set syslogging */
/* do some logic to determine wether we are running the daemon for the first time and if we are call the one time function which uses fgets() to recieve some input */
while(1) {
/* do required work */
}
/* do some clean up procedures and exit */
return 0;
}
君たちは設定ファイルを使用して言及します。これは、入力を介して受け取ったパラメータを格納するために行うものです。しかし、私はまだ最初にstdinを介してユーザーからこれらを取得する必要があります。最初に実行しているかどうかを判断するロジックは、configファイルの存在に基づいています。
いくつかのコードを見ずにはわかりません。しかし、それはあなたが間違っているように聞こえる。あなたはデーモンがstdin/stdoutを取ることができるようにしたいと言っていますか?ソケットや何かの上にそれらを配管する必要があります。 – Falmarri
はいファルマーリですが、その特定の関数が呼び出されたときに限り、私は言ったように一度のことです。私のコードでは、私はfork()の後にこの関数を呼び出します。新しいプロセス。 – Error1f1f
なぜ設定ファイルを使用しないのですか? –