(フル/絶対パスではなく)相対パス、つまり現在のパスの下にファイルを出力するプログラムを作成するとします。
次にそれをコンパイルし、実行可能ファイルをいくつかのディレクトリに保存しますpath1
。
これで実行可能ファイルを実行し、別のdirの下にあります
path2
。実行可能ファイルpath2
はpath1
。実行可能ファイルがファイルに書き込まない理由は疑問に思います
path1
。つまり、「現在のルート」でpath2
はないのはなぜですかpath1
?実行時に実行可能ファイルがに保存されているファイルを開くと、実行可能ファイルが実行されていて実行可能ファイルがに保存されていても
path3
現在のパスになるのはなぜですか?path3
path2
path1
オペレーティングシステムは、プロセスの実行中にプロセスの現在のパスをどのように割り当てて変更しますか?
答え1
質問1: プログラムがインストールされたディレクトリがプログラムの実行時にプロセスの初期ディレクトリではないのはなぜですか?
実際、プログラムのインストールパスは重要ではなく、重要なのは現在のプログラムのパスです。父プロセス。シェルから始まるプログラムの場合、親プロセスはシェル自体であるため、新しいプロセスの最初の現在のディレクトリはシェルの現在のディレクトリです。
質問2:プロセスは現在のディレクトリの外にファイルを作成しますか?
ファイルパスの指定方法には、絶対パスと相対パスの2つがあります。絶対パスは、/
ファイルシステムのルート()から始まり、スラッシュ( "/")で始まり解釈されます。相対パスは、プロセスの現在のディレクトリで解釈されます。したがって、/path2
2つのディレクトリがあり、/path2/path3
現在のディレクトリがあるプロセスがある場合は、ファイルをpath2
開くことができますpath3/file
。パスは相対パスなので(スラッシュで始まらない)、現在のディレクトリで計算されますpath2
。最後に、新しいファイルのフルパスはです/path2/path3/file
。したがって、特定のディレクトリで実行されるプロセスは、そのディレクトリの外部にファイルを作成できます。
質問3: オペレーティングシステムは、プロセスの実行中にプロセスの現在のパスをどのように割り当てて変更しますか?
プロセスは、システムコールを介してオペレーティングシステムに現在のディレクトリを変更するように要求できますchdir(2)
(新しいディレクトリなどに対する権限が必要な場合)。これは別のメカニズムであり、ファイルを開くことには関係ありません。ファイルを開くopen(2)
には、他のシステムコール(例えば。