私のプログラムでは、実行可能ファイルをある場所から別の場所にコピーし、コピーしたファイルを実行しています。コピーしたファイルを実行すると、「許可が拒否されました」というエラーが表示されます。しかし、プログラムを再起動すると、ファイルは問題なく実行されます。誰かが問題を解決してくれますか? 以下のコードは単純ですが、問題を示しています。
void copyFile(string _from, string _to)
{
std::ifstream src(_from.c_str());
std::ofstream dst(_to.c_str());
dst << src.rdbuf();
}
int main()
{
string original("./exe_file");
string dest_file("./exe_dir/exefile");
system("./exe_dir/exefile"); //Fails on first run because exe_dir does not exist.
//mkdir and copy the file.
mkdir("./exe_dir",S_IRWXO | S_IRWXU | S_IRWXG);
copyFile(original, dest_file);
//Open the file and close it again to flush the attribute cache.
int fd = open(dest_file.c_str(),O_RDONLY);
close(fd);
//The line below fails with system error code 2 (Permission denied) on exefile.
return system("./exe_dir/exefile");
{
プログラムを実行する前に元のファイルに「chmod 777 exe_file」を使用しましたが、このプログラムを実行した後、宛先にも同じアクセス権があります。手動でうまく実行できます。そして、その後のプログラムの実行はすべて成功します。最初の実行で失敗するのはなぜですか?