Я пишу модуль ядра Linux. Попутно создавайте каталоги:
/etc/data_stor/user/id/{0001}
/etc/data_stor/user/id/{0002}
/etc/data_stor/user/id/{0003}
/etc/data_stor/user/id/{0004}
Создайте такой же набор файлов в этих каталогах с именами Имя, Семья, Возраст и т. Д. c. и запишите туда необходимую информацию. Я создаю каталоги следующим образом:
const char* path = /etc/data_stor/user/id/{0001};
create_path(path);
static int dev_mkdir(const char *name, umode_t mode)
{
struct dentry *dentry;
struct path path;
int err;
dentry = kern_path_create(AT_FDCWD, name, &path, LOOKUP_DIRECTORY);
if (IS_ERR(dentry))
return PTR_ERR(dentry);
err = vfs_mkdir(d_inode(path.dentry), dentry, mode);
done_path_create(&path, dentry);
return err;
}
static int create_path(const char *nodepath)
{
char *path;
char *s;
int err = 0;
path = kstrdup(nodepath, GFP_KERNEL);
if (!path)
return -ENOMEM;
s = path;
for (;;) {
s = strchr(s, '/');
if (!s)
break;
s[0] = '\0';
err = dev_mkdir(path, 0777);
if (err && err != -EEXIST)
break;
s[0] = '/';
s++;
}
kfree(path);
return err;
}
И создаю файлы по функциям:
hFile = filp_open(Path, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (IS_ERR(hFile))
{
printk("write_dword open file failed %s %ld\n", Path, PTR_ERR(hFile));
return PTR_ERR(hFile);
}
kernel_write(hFile, data, sizeof(DWORD), &foff);
filp_close(hFile, 0);
Каталоги и информационные файлы успешно созданы, но есть некоторые проблемы:
- При ручном удалении директорий с файлами из файлового менеджера система иногда дает сбой (ядро c).
- При попытке прочитать информацию из некоторых файлов функция
filp_open
возвращает - Ошибка ENOENT. Файл или каталог не найдены, хотя они присутствуют.
Также требуется удалить все каталоги при появлении запроса в пользовательском режиме. Я написал функцию, но она удаляет только пустой каталог, т.е. в нем не должно быть файлов.
Прошу вас помочь с этими вопросами, объяснить, в каком направлении двигаться, или привести конкретный пример c или литература.