0

プログラムを特定のディレクトリに移動して実行する必要があります

system( ... );そこにいて、以前の場所に戻してください。どうすればいいですか?

4

4 に答える 4

3

ただcdあなたのsystem電話でしてください:

system("cd wherever; command");

文字列全体がに渡されるsh(1)ので、そこで通常のシェル処理を行うことができます。サブシェル内にあるため、プログラムの作業ディレクトリは変更されません。

于 2012-10-19T05:46:52.893 に答える
3

LinuxおよびPosixシステムでは、system(3)関数はfork(2)execve(2)waitpid(2)などのシステムコールの上に実装されます。chdir(2) syscallを使用して、現在のディレクトリを変更できます。getcwd(2)を使用して、変更する前に取得(およびメモ化)することができます。( and beforeを呼び出してから、元の現在のディレクトリを別のディレクトリに復元することもできます)。getcwdchdirsystemchdir

AdvancedLinuxProgrammingAdvancedUnixProgrammingのような良い本を読むことをお勧めします。それらにはあなたの質問に答えるためのいくつかの章があります。

フォーラムがこれらすべてをあなたに説明することを期待しないでください。本を読む。

于 2012-10-19T05:48:08.520 に答える
2

システムを呼び出す前にchdirを使用してください。システムの後でディレクトリに戻る前にgetcwdを使用することもできます。chdir

于 2012-10-19T06:02:03.097 に答える
1
  1. chdirで特定のディレクトリに移動します
  2. system(...)を実行します(Basileが言ったように、システムがユーザー定義変数を取得している場合は、それらをサニタイズしてください)

プログラムがsystem(..)を実行すると、変更されたディレクトリに配置されます。system(...)の後、変更されたディレクトリにあります。プログラムが終了すると、元のディレクトリにあります。

于 2012-10-19T06:03:20.850 に答える