フルパスを指定して実行可能ファイルを起動したい:
std::system("C:/binary.exe")
この場合、作業ディレクトリを指定する方法はありますか?
あなたが望むものを達成するための移植可能な方法があるとは思いません.少なくとも、私が知る限り、C++標準によって義務付けられていません. 一般的に言えば、提供されている以上の機能が必要な場合system()
は、他の場所を探す必要があります。Linux および Unix システムでは、これはfork(2)
andexec(3)
関数になります。Windowsの場合CreateProcess()
。
これを実現するための Linux のテストされていないコードは次のようになります。
#include <cstdio>
#include <unistd.h>
int
main()
{
const pid_t pid( fork() );
if ( !pid ) {
// child process
if ( chdir("/tmp") ) {
perror( "chdir" );
}
execl( "/binary", "binary", (char*)0 );
perror( "execl(\"/binary\")" );
_exit( 1 );
}
}