Как программно создать файл, а также пропустить каталоги по пути в системе Linux?

Я хочу создать файл в системе Linux в моей программе, скажем /a/b/c/test, в настоящее время у меня есть только dir / a, и я хочу сделать это в моей программе, есть ли какая-либо функция, которая может создать файл как ну как пропустить dirs (то есть создать b/c/test) в одной сделке? open, fopen, mkdir, кажется, все не может работать, если на пути отсутствуют пропущенные каталоги. Спасибо.

4 ответа

Решение

От strace mkdir -p a/b/c:

mkdir("a", 0751)                        = 0
open("a", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_NOFOLLOW) = 3
fchdir(3)                               = 0
close(3)                                = 0
mkdir("b", 0751)                        = 0
open("b", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_NOFOLLOW) = 3
fchdir(3)                               = 0
close(3)                                = 0
mkdir("c", 0751)                        = 0

Другими словами, вы должны позвонить mkdir() самостоятельно, в цикле на каталог, затем создайте файл. Вот как mkdir Exe делает это (в C). Почему бы не запустить mkdir -p /a/b/c команда с execve? Конечно, с C-вещами, настроенными на вызов.

Я думаю, что вам нужно две команды:

$ mkdir -p /a/b/c/ && touch /a/b/c/test

Извините, вы должны быть удовлетворены двухэтапным процессом:

mkdir -p /a/b/c
touch /a/b/c/test

Если вы используете Glib (библиотека самого низкого уровня Gtk, которую можно использовать независимо), вы можете просто вызвать g_mkdir_with_parents, чтобы создать все каталоги (например, mkdir -p команда делает)

Другие вопросы по тегам