FreeBSD SysCall в C -> неявное объявление функции 'modfind' - PullRequest
1 голос
/ 04 декабря 2011

Я расширяю модуль FreeBSD, и мне нужно иметь возможность вызывать 2 функции системных вызовов, которые я написал (используя KLD).Я знаю, что сами функции системного вызова работают нормально, так как у меня есть отдельная тестовая программа для них, которая вызывает их и возвращает правильные значения очень хорошо.

Однако, когда я попытался подключить соответствующие части этогоЯ тестирую программу в реальной программе, я получаю

vnode.c: In function 'getSyscall':
vnode.c:1014: warning: implicit declaration of function 'modfind'
vnode.c:1022: warning: implicit declaration of function 'modstat'
*** Error code 1

У меня есть все возможности (работающей) тестовой программы в реальном мире, поэтому я не понимаю, почему она не может найти modfindи функции модстата.

#include <stdio.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/module.h>
#include <unistd.h>
#include <errno.h>
#include <sys/param.h>

// Lots of other unrelated functions here


/*
 *
 * returns a syscall number or -1 for error
 */
int getSyscall
(char *str)
{
    struct module_stat stat;
    int modid;
    int syscallnum;

    modid = modfind(str);
    if (modid == -1)
    {
        perror("modfind: ");
        return -1;
    }

    stat.version = sizeof(stat);
    if (modstat(modid, &stat) == -1)
    {
        perror("modstat: ");
        return -1;
    }

    syscallnum = stat.data.intval;

    return syscallnum;
}

1 Ответ

0 голосов
/ 19 октября 2012

Обязательно

#include <sys/module.h>

(после sys / param.h). modfind (2) Страница руководства говорит об этом.

(Почему этот вопрос с тегом "linux" меня побеждает ...)

...