0

コンソールから起動すると問題なく動作するプログラム (Crafty chess) があります。私のアプリケーションでは、デーモン化しました。プロセスをデーモン化するときは、 を介して作業ディレクトリを「/」に変更することになっていchdir("/")ます。

そのアドバイスに従うと、「/」に適切な権限がないため、一部のユースケースでプログラムが終了します。そうしないchdirと、プログラムは機能しますが、除外するだけchdirでは松葉杖になります。

省略に代わる健全な方法はありchdir("/")ますか?

4

2 に答える 2

3

おそらく現在のディレクトリに書き込むべきではありません。代わりに、特定のディレクトリに書き込む方がよいでしょう。/tmp現在のディレクトリに cd してファイルを書き込む代わりに、ファイルを書き込みます/tmp/whatever。つまり、常に絶対パスを使用します。

/tmp関連する注意事項として、回避できる場合はハードコーディングしないでください。それを構成オプションにするか、$TMPDIR環境変数を使用するか、何よりも使用してmktemp()ください。

于 2012-10-20T21:22:43.267 に答える
0

を実行せずにプロセスをデーモン化するように、 daemon(3)関数を (ゼロ以外の最初のnochdir引数で)chdir("/")呼び出すことができます。

しかし、John Kugelman が示唆するように、デーモン化されたプログラムでは相対パスを書き込む (または読み取る) べきではありません (または、chdir読み取りと書き込みと検索が可能なディレクトリに対して明示的に行う必要があります)。

于 2012-10-21T06:39:47.747 に答える