6

プログラムがファイルにアクセスしたり、system()などを使用したりするとき、そのプログラムの現在の作業ディレクトリは物理的にどのように認識/保存されているか? プログラムの作業ディレクトリは論理的にはグローバル変数に似ているため、特に「グローバル」変数がデフォルトでスレッドローカルである D のような言語では、スレッドローカルであることが理想的です。プログラムの現在の作業ディレクトリをスレッドローカルにすることはできますか?

注: 特に D に詳しくない場合は、言語にとらわれない回答でも役に立ちます。

4

2 に答える 2

13

Linuxでは、各プロセスはプロセス記述子(a)で表されますtask_struct。この構造は、カーネルソースのinclude / linux/sched.hで定義されています。

のフィールドの1つは、ファイルシステム関連の情報を格納task_structするへのポインタです。include / linux/fs_struct.hで定義されています。fs_structfs_struct

fs_structと呼ばれるフィールドがありpwd、現在の作業ディレクトリ(それが存在するファイルシステム、およびディレクトリ自体の詳細)に関する情報が格納されます。

于 2010-09-23T18:57:01.880 に答える
8

現在のディレクトリは、言語やフレームワークではなく、OS によって維持されます。詳細については、GetCurrentDirectory WinAPI 関数の説明を参照してください。

説明から:

マルチスレッド アプリケーションと共有ライブラリ コードでは、GetCurrentDirectory 関数を使用せず、相対パス名を使用しないでください。SetCurrentDirectory 関数によって書き込まれた現在のディレクトリの状態は、各プロセスでグローバル変数として格納されるため、マルチスレッド アプリケーションは、この値を読み取りまたは設定している可能性のある他のスレッドからのデータ破損の可能性なしに、この値を確実に使用することはできません。

于 2010-09-23T18:45:54.907 に答える