У меня есть такая короткая программа:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
int main (int argc, char * argv[]) {
std::string homedir = std::getenv("HOME");
std::string filename = argc > 1 ? argv[1] : (homedir + "/" + "file");
std::cout << homedir << std::endl;
std::cout << filename << std::endl;
std::fstream file;
file.open(filename, std::ios::out);
file << "Yo yo waddup" << std::endl;
file.close();
return 0;
}
Когда я не указываю аргументов, он открывает файл в домашнем каталоге пользователя. В этом, конечно, есть смысл. Но когда я запускаю его из другого каталога, например:
$ ./folder/hometest examplefile
Программа создает «examplefile» в моем текущем каталоге вместо каталога, в котором находится программа.
Почему именно это происходит?