ubuntu&C/C++でのプログラム中にmkdirを使っていてハマったので備忘録がわりに。
windowsだとあまり気にせずmkdir使ってもなんとかなるんやけど、
ubuntuで使うとオプション指定が必要。
まちがえるとアクセス権限がないディレクトリを作ってしまって、
直後のソースでそのディレクトリの中にファイルを新規作成するときに蹴られる。
なんで己の権限がないディレクトリが作れるんや。
意味わからんやんけ(仕様をちゃんと確認してないくせに逆ギレ)。
ディレクトリを作った直後にシステム側から権限を付与するから作るときは関係ないのか?
(ここまで書いてて◯ンター☓◯ンターの◯ラピカをちょっと思い出した)
さて、作りたかったのは、相対パスで指定したディレクトリ名にフルパスつけて、
そのディレクトリを作った上でそのフルパスを返す関数。
ディレクトリ作成に失敗したらなんせ空のstringを返すようにしとく(対応が雑)。
いいの。どうせシステム中ではディレクトリ構成がFIXされた状態でしか運用しない予定だから。
(↑こういう考えの奴がチーム開発の足を引っ張る)
※↓もとのソースをいじってアップしているから動作確認してません。
std::string create_dir(std::string dir_name)
{
char buf[1024] = "";
if (NULL == getcwd(buf, sizeof(buf)))
return "";
std::string new_dir = buf + std::string("/") + dir_name;
if (0 != mkdir(new_dir.c_str(), S_IRWXO | S_IRWXU | S_IRWXG))
{
return "";
}
else
{
return new_dir;
}
}
例えばここで、
if (0 != mkdir(new_dir.c_str(), S_IRWXO))
とかやるとあとで後悔することになる。
自分で作ったくせに自分にはアクセス権限がないから(S_IRWXOは第三者へのフルアクセス権限付与)、
そのあとでファイルを中に作成しようとするとよくわからんことになる。
デフォルトで全員にフルアクセスにしといてくれたらいいやんか。
意識高い人は自分でオプション指定するやろ。
しかもmkdirのページにオプションのこと書いてないやんけ。
どういうことやねん。せめてリンク貼れ。。