C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

カレントディレクトリの影響範囲(有効範囲)は?

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■100869 / inTopicNo.1)  カレントディレクトリの影響範囲(有効範囲)は?
  
□投稿者/ 高橋 (1回)-(2022/11/12(Sat) 01:43:28)

分類:[ソフトウェア全般] 

複数のプリグラムを同時に実行して、
システムコール等の手法でそれぞれにカレントディレクトリを変更する場合、他のプリグラムに影響するのでしょうか。

そして、影響するかどうかはOSに依存するのでしょうか。

ご教授宜しくお願い致します。

引用返信 編集キー/
■100870 / inTopicNo.2)  Re[1]: カレントディレクトリの影響範囲(有効範囲)は?
□投稿者/ とっちゃん (768回)-(2022/11/12(Sat) 01:54:32)
No100869 (高橋 さん) に返信
> 複数のプリグラムを同時に実行して、
> システムコール等の手法でそれぞれにカレントディレクトリを変更する場合、他のプリグラムに影響するのでしょうか。
>
> そして、影響するかどうかはOSに依存するのでしょうか。
>
OSに依存します。

とはいえ、今どきのOSだと組み込みでもない限りは影響を受けることは「ほぼ」ないと思ってよいと思います。

Windows はもちろん、MacやLinux、あるいはスマホ(Android, iOS)など、アプリ(プロセス)ごとにメモリ空間が
別々に管理されているOSであれば、ファイルシステム情報もプロセスごとに別々に管理されているので
カレントディレクトリの変更が影響することはありません。

ですがアプリ内のユーザープログラムコード以外の部分でカレントディレクトリが変更されることはあります。
(ファイルダイアログを呼び出した場合など)

また、起動時のカレントディレクトリは呼び出し元や呼び出し方法によって変わります。
そのため、起動時はアプリのあるディレクトリだろうというような思い込みは思わぬ不具合を招く要因になります。

具体的にどうなのか?というのは、OSや呼び出し方法によって変わるので個別に質問することをお勧めします。

引用返信 編集キー/
■100871 / inTopicNo.3)  Re[2]: カレントディレクトリの影響範囲(有効範囲)は?
□投稿者/ 高橋 (2回)-(2022/11/12(Sat) 12:14:04)
No100870 (とっちゃん さん) に返信

ご教授本当にありがとうございます。
これほど分かりやすく、徹底な説明は実に素晴らしく、心より感謝いたします!

具体問題として、Pythonという言語の場合、
カレントディレクトリがimportしようとする『パッケージ(folder)』や『モジュール(.py ファイル)』の親ディレクトリでなければ、
上手くimportできないので、importターゲットの存在場所に合わせて、カレントディレクトリをしょっちゅう変えなければなりません。

このようなやり方に非常に違和感がありますし、
もしもちょうどその瞬間他のプログラム・アプリケーションもファイルシステムを操作していれば、
お互いに影響するのではないかと危惧しています。

杞憂ですね。



引用返信 編集キー/
■100872 / inTopicNo.4)  Re[3]: カレントディレクトリの影響範囲(有効範囲)は?
□投稿者/ とっちゃん (769回)-(2022/11/12(Sat) 14:37:01)
No100871 (高橋 さん) に返信
> 具体問題として、Pythonという言語の場合、
> カレントディレクトリがimportしようとする『パッケージ(folder)』や『モジュール(.py ファイル)』の親ディレクトリでなければ、
> 上手くimportできないので、importターゲットの存在場所に合わせて、カレントディレクトリをしょっちゅう変えなければなりません。
>
pythonが動く環境であれば、ファイルシステムはプロセスごとに固有の値になるので
全く関係ない別のプログラムのカレントディレクトリは無関係なので影響なないものと思います。


> このようなやり方に非常に違和感がありますし、

カレントディレクトリを基準にパッケージやモジュールをロードする仕組みは悪用できてしまうという欠点もあります。
悪意のあるプログラムが一番最初に狙う手段だと思っていいでしょう。

python だけがプログラム言語ではないので、もし、この仕組みが嫌ならほかのプログラム言語(Goや、Rust、C#などなど)を
選択してもよいと思います。


> もしもちょうどその瞬間他のプログラム・アプリケーションもファイルシステムを操作していれば、
> お互いに影響するのではないかと危惧しています。
>
一応。
少なくとも Python の動作環境であれば、プロセス分離されているので、ほかのプログラムの
影響を受けることはありません。

引用返信 編集キー/
■100873 / inTopicNo.5)  Re[4]: カレントディレクトリの影響範囲(有効範囲)は?
□投稿者/ 高橋 (3回)-(2022/11/12(Sat) 16:26:11)

良い勉強になりました。

再度お礼を申し上げます&#10083;


解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ