- ベストアンサー
子プロセスの状態を親プロセスに渡したい
今、C言語を用いてシェルを作成していて、そこでcpコマンドを実現したいと思っています。その際、子プロセスを生成し、そこでgetcwdやchdirを使用してディレクトリの移動を行うのですが、子プロセスを終了させると親プロセスでは移動前のディレクトリに戻ってしまいます。 子プロセスでディレクトリを移動したときに,親プロセスでも移動された状態にするにはどうすればいいのでしょうか?それとも、この操作は親ディレクトリでしか行えないのでしょうか? できるだけ詳しく教えていただけるとありがたいです。回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問に「cpコマンドを実現したい」と書かれているのは、もしかしてcdコマンドの書き間違いでしょうか。そう考えると、なぜ親プロセスのカレントディレクトリを移動したいのかが納得できます。 この推測が合っていたとして、普通はcdコマンドのために子プロセスを作ることはしません。cdはシェルのビルトインコマンドとして実現されているのが一般的です。
その他の回答 (2)
- salsberry
- ベストアンサー率69% (495/711)
> カレントディレクトリに関するプロセス間通信はC言語ではどのようにして実現できるのでしょうか? 「カレントディレクトリに関するプロセス間通信」というものはありません。 リンク先ページにあるような手法の中から好きなものを使って、カレントディレクトリの変更を他プロセスに通知する仕組みを自力で作ってください。名前付きパイプあたりが適当でしょうか。 http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E9%96%93%E9%80%9A%E4%BF%A1 ただ、子プロセス側の操作によって親プロセス (シェル) のカレントディレクトリが変わってしまうようなUNIXのシェルというのは寡聞にして知りません。 どういうことをしたいためにそんな設計にしているのかを書いていただければ、もっと無理のない別の方法をアドバイスしてくれる人がいるかもしれません。
- salsberry
- ベストアンサー率69% (495/711)
OSが何なのか書かれていませんが、UNIX系ですかね。 通常、カレントディレクトリは各プロセスごとに独立して保持している情報です。子プロセスを作るときには親プロセスのカレントディレクトリを引き継ぎますが、子プロセスの生成が終わった後は、親プロセス・子プロセスどちらのカレントディレクトリを変更しても他方に影響を与えることはありません。 「子プロセスを終了させると親プロセスでは移動前のディレクトリに戻ってしまいます」と書かれていますが、親プロセス側のカレントディレクトリは戻ってしまうのではなく、そもそも変更されていないのです。 子プロセスでカレントディレクトリを変えたら親プロセスのカレントディレクトリも勝手に変わってしまうのでは危なくて仕方ありません。 どうしても子プロセス側のカレントディレクトリ変更を親プロセスに反映したいのであれば、両者で何らかのプロセス間通信をするしかないのでは。
補足
すみません。OSを書き忘れていました。OSはFreeBSDです。 子プロセスのカレントディレクトリを変更しても、親プロセスのカレントディレクトリは変わらないのですね。両者でプロセス間通信を行うとありますが、カレントディレクトリに関するプロセス間通信はC言語ではどのようにして実現できるのでしょうか? 質問ばかりで申し訳ありません。回答よろしくお願いします。