Как выглядит процесс создания файла в файловой системе ext2?Ext2 - как создается файл
Я пытаюсь сделать простой syscall, который берет путь и создает заданный файл - как прикосновение.
Например, код:
int main(void)
{
syscall(MY_SYSCALL_NUMBER, "/tmp/file");
}
Если создать файл с именем "файл" в/TMP.
Теперь, как должен работать самоцвет?
Моя работа до сих пор (я опущен проверки для readibility здесь ошибка):
asmlinkage long sys_ccp(const char __user *arg)
{
struct path path;
struct inode *new_inode;
struct qstring qname;
//ommited copy from user for simplicity
qname.name = arg;
qname.len = length(arg);
kern_path(src, LOOKUP_FOLLOW, &path);
new_inode = ext2_new_inode(path.dentry->d_parent->d_inode, S_IFREG, &qname);
}
Это похоже на работу (я могу увидеть в журналах, что выделяется индексный дескриптор), однако, когда я звоню ls
на Я не вижу файл там.
Моя идея состояла в том, чтобы добавить новый индексные struct dentry
каталога, поэтому я добавил этот код:
struct dentry *new_dentry;
new_dentry = d_alloc(path.dentry->d_parent, &qname);
d_instantiate(new_dentry, new_inode);
Однако, это все еще, кажется, не работает (я не могу увидеть файл, используя ls
).
Как правильно реализовать этот системный стол, что мне не хватает?
РЕДАКТИРОВАТЬ: Что касается ответа на R .., то этот пульт должен работать с ext2 и узнавать о его дизайне, поэтому мы можем предположить, что путь всегда действителен, файловая система действительно ext2 и так далее.
Не пересылайте вопрос, если у вас нет ответа или вопрос был закрыт! Вместо этого отредактируйте оригинал и попросите повторно открыть, если он теперь соответствует правилам сайта. См. [Ask]. – Olaf
Добавление системных вызовов Linux - это не способ «поиграть с ext2 и узнать его дизайн». Если вы хотите это сделать, напишите автономную утилиту, которая может обрабатывать файловые системы ext2 (либо как файлы изображений, либо напрямую обращаться к блочному устройству). То, что вы, похоже, пытаетесь сделать, - это вытащить на внутренние интерфейсы программирования ядра для реализации ext2 fs в ядре *, что больше связано с тем, как работает слой vfs ядра, чем работает ext2. Это не полезно. –