![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
今、C言語を用いてシェルを作成していて、そこでcpコマンドを実現したいと思っています。その際、子プロセスを生成し、そこでgetcwdやchdirを使用してディレクトリの移動を行うのですが、子プロセスを終了させると親プロセスでは移動前のディレクトリに戻ってしまいます。
子プロセスでディレクトリを移動したときに,親プロセスでも移動された状態にするにはどうすればいいのでしょうか?それとも、この操作は親ディレクトリでしか行えないのでしょうか?
できるだけ詳しく教えていただけるとありがたいです。回答よろしくお願いします。
No.3ベストアンサー
- 回答日時:
質問に「cpコマンドを実現したい」と書かれているのは、もしかしてcdコマンドの書き間違いでしょうか。
そう考えると、なぜ親プロセスのカレントディレクトリを移動したいのかが納得できます。この推測が合っていたとして、普通はcdコマンドのために子プロセスを作ることはしません。cdはシェルのビルトインコマンドとして実現されているのが一般的です。
No.2
- 回答日時:
> カレントディレクトリに関するプロセス間通信はC言語ではどのようにして実現できるのでしょうか?
「カレントディレクトリに関するプロセス間通信」というものはありません。
リンク先ページにあるような手法の中から好きなものを使って、カレントディレクトリの変更を他プロセスに通知する仕組みを自力で作ってください。名前付きパイプあたりが適当でしょうか。
http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD% …
ただ、子プロセス側の操作によって親プロセス (シェル) のカレントディレクトリが変わってしまうようなUNIXのシェルというのは寡聞にして知りません。
どういうことをしたいためにそんな設計にしているのかを書いていただければ、もっと無理のない別の方法をアドバイスしてくれる人がいるかもしれません。
No.1
- 回答日時:
OSが何なのか書かれていませんが、UNIX系ですかね。
通常、カレントディレクトリは各プロセスごとに独立して保持している情報です。子プロセスを作るときには親プロセスのカレントディレクトリを引き継ぎますが、子プロセスの生成が終わった後は、親プロセス・子プロセスどちらのカレントディレクトリを変更しても他方に影響を与えることはありません。
「子プロセスを終了させると親プロセスでは移動前のディレクトリに戻ってしまいます」と書かれていますが、親プロセス側のカレントディレクトリは戻ってしまうのではなく、そもそも変更されていないのです。
子プロセスでカレントディレクトリを変えたら親プロセスのカレントディレクトリも勝手に変わってしまうのでは危なくて仕方ありません。
どうしても子プロセス側のカレントディレクトリ変更を親プロセスに反映したいのであれば、両者で何らかのプロセス間通信をするしかないのでは。
この回答への補足
すみません。OSを書き忘れていました。OSはFreeBSDです。
子プロセスのカレントディレクトリを変更しても、親プロセスのカレントディレクトリは変わらないのですね。両者でプロセス間通信を行うとありますが、カレントディレクトリに関するプロセス間通信はC言語ではどのようにして実現できるのでしょうか?
質問ばかりで申し訳ありません。回答よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- UNIX・Linux JSLinuxについて。 Linuxのこの手順のプログラミングは合っているでしょうか。 ①ホームディ 2 2022/06/20 15:33
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- 日本株 SBI証券HYPER SBI 2のエラー 1 2023/01/31 13:38
- AJAX RPA(PowerAutomate)の実装について 1 2023/07/31 13:46
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
- 環境学・エコロジー 二酸化炭素の排出 1 2023/08/07 16:40
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスIDの取得方法について
-
explorer.exeが異様にメモリを食う
-
タスクマネージャーのプロセス...
-
プロセスIDからウィンドウハ...
-
プロセスのアタッチ・デタッチ...
-
CreateObjectで作成したExcelの...
-
怪しいプロセス教えてください。
-
他のコンピュータのプロセスを取得
-
ADOでアクセスのレコードに...
-
[C#]リモートコンピューターを...
-
C++のプログラムをバックグラウ...
-
Visual C++からpingを実行して...
-
プロセスハンドル or ウインド...
-
POSIX メッセージキュー作成時...
-
VBSからbat実行(WMI)して戻り値...
-
デバックにプロセスをアタッチ...
-
プロセスが実行中かどうか調べ...
-
C#でのbatファイル実行結果取得
-
WSH.Runで待機できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
C#でのbatファイル実行結果取得
-
VB6.0 SHELLで起動...
-
ADOでアクセスのレコードに...
-
Windowsでのfork方法
-
非表示になったエクセルは?
-
共有メモリの同時アクセスにつ...
-
プロセスIDからウィンドウハ...
-
プロセスIDの取得方法について
-
C++のプログラムをバックグラウ...
-
C++でシェルを起動
-
Linuxでのスレッド間メッセージ...
-
OSPFでプロセスを分ける意義に...
-
怪しいプロセス教えてください。
-
Process.Startの戻り値を後で取得
-
SendMessageが失敗するときがある
-
ウィンドウのタイトルからプロ...
おすすめ情報