その名前の Unix システム コールの mkdir(2) マニュアル ページを読むと、このコールはパス内に中間ディレクトリを作成せず、パス内の最後のディレクトリのみを作成するようです。ディレクトリ文字列を手動で解析して各ディレクトリを個別に作成することなく、パス内のすべてのディレクトリを作成する方法 (または他の関数) はありますか?
ベストアンサー1
残念ながら、これを自動的に実行するシステム コールはありません。エラーが発生した場合に何が起こるかを明確に定義する方法がないからだと思います。すでに作成されたディレクトリを残す必要がありますか? 削除しますか? 削除に失敗した場合はどうしますか? などなど...
しかし、自分で巻くのはかなり簡単で、グーグルで「再帰的な mkdir' と検索すると、いくつかの解決策が見つかりました。上位にあった解決策を 1 つ紹介します。
http://nion.modprobe.de/blog/archives/357-Recursive-directory-creation.html
static void _mkdir(const char *dir) {
char tmp[256];
char *p = NULL;
size_t len;
snprintf(tmp, sizeof(tmp),"%s",dir);
len = strlen(tmp);
if (tmp[len - 1] == '/')
tmp[len - 1] = 0;
for (p = tmp + 1; *p; p++)
if (*p == '/') {
*p = 0;
mkdir(tmp, S_IRWXU);
*p = '/';
}
mkdir(tmp, S_IRWXU);
}