Как программно создать файл, а также пропустить каталоги по пути в системе 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
команда делает)