Невозможно создать новый файл в файловой системе /proc из пользовательского пространства на C. Возможно ли это?

Итак, вот функция, которая должна создать и записать строку в /proc/minifwdb:

int write_to_file(char* rule)
{
    FILE* fin;

    fin = fopen("/proc/minifwdb", "a");

    if (!fin)
    {
        printf("Could not open the file /proc/minifwdb, exiting...\n");
        return 1;
    }

    if (fprintf(fin, "%s\n", rule) < 0)
        return 1;

    fclose(fin);

    return 0;
}

Когда вызывается fopen(), он возвращает NULL. И в настоящее время нет такого файла, как /proc/minifwdb. Мне нужно создать его с помощью LKM, а затем использовать его для записи информации? Я также пытаюсь создать его от пользователя, у которого нет root-доступа. Какие-либо предложения?


person user1090944    schedule 31.05.2014    source источник
comment
Вы не можете из пользовательского пространства, но зачем вы вообще пытаетесь? Чего вы пытаетесь достичь, создавая файл в /proc?   -  person Mat    schedule 31.05.2014
comment
Мне нужно передать строку из пользовательского пространства в ядро.   -  person user1090944    schedule 31.05.2014
comment
Тогда да, вам нужно сделать это со стороны ядра.   -  person Mat    schedule 31.05.2014
comment
Я могу написать модуль, который будет загружаться в эту функцию с помощью системного вызова, например ›syscall(sudo insmod create_file.ko). Модуль просто создаст новый файл в procfs, а потом я пропишу туда строку. Это звучит как что-то адекватное?   -  person user1090944    schedule 31.05.2014
comment
Нет, это не то, как вы должны это делать. также тот факт, что вы пытаетесь запустить команду sudo из системного вызова, вы ДЕЙСТВИТЕЛЬНО не понимаете, что делаете. Можете ли вы объяснить, ПОЧЕМУ вы хотите, чтобы что-то было написано в ядре? Какова ваша конечная цель, может быть, тогда мы сможем помочь   -  person Ahmed Masud    schedule 01.06.2014
comment
@AhmedMasud Мне нужно захватить входящие и исходящие сетевые пакеты и на основе информации (правил), переданной из пользовательского пространства, решить, следует ли отбросить или разрешить пакет.   -  person user1090944    schedule 01.06.2014


Ответы (1)


Файлы в /proc используются как интерфейс между пользовательским пространством и ядром.

Такой файл можно использовать для передачи строки из пространства пользователя в ядро, но за создание файла отвечает код ядра, который хочет ее получить.

person CL.    schedule 31.05.2014