プログラムを特定のディレクトリに移動して実行する必要があります
system( ... );
そこにいて、以前の場所に戻してください。どうすればいいですか?
ただcd
あなたのsystem
電話でしてください:
system("cd wherever; command");
文字列全体がに渡されるsh(1)
ので、そこで通常のシェル処理を行うことができます。サブシェル内にあるため、プログラムの作業ディレクトリは変更されません。
LinuxおよびPosixシステムでは、system(3)
関数はfork(2)、execve(2)、waitpid(2)などのシステムコールの上に実装されます。chdir(2) syscallを使用して、現在のディレクトリを変更できます。getcwd(2)を使用して、変更する前に取得(およびメモ化)することができます。( and beforeを呼び出してから、元の現在のディレクトリを別のディレクトリに復元することもできます)。getcwd
chdir
system
chdir
AdvancedLinuxProgrammingやAdvancedUnixProgrammingのような良い本を読むことをお勧めします。それらにはあなたの質問に答えるためのいくつかの章があります。
フォーラムがこれらすべてをあなたに説明することを期待しないでください。本を読む。
システムを呼び出す前にchdirを使用してください。システムの後でディレクトリに戻る前にgetcwdを使用することもできます。chdir
プログラムがsystem(..)を実行すると、変更されたディレクトリに配置されます。system(...)の後、変更されたディレクトリにあります。プログラムが終了すると、元のディレクトリにあります。