2013-04-07 3 views
0

я хочу, чтобы поймать трубу() системный вызов, поэтому я изменил исходный код в pipe.cLinux программирование ядра

static pipe_hook_t pipe_hook; 
pipe_hook_t set_pipe_hook(pipe_hook_t hook) 
{ 
    pipe_hook_t old_hook = pipe_hook; 
    pipe_hook = hook; 
    printk(KERN_INFO, "pipe hook: %p", hook); 
    return old_hook; 
} 

EXPORT_SYMBOL_GPL(set_pipe_hook); 

затем я попытался определить pipe_hook_t в файле syscalls.h (входит в pipe.c)

typedef void (*pipe_hook_t)(int *filedes); 
pipe_hook_t set_pipe_hook(pipe_hook_t hook); 

и у меня есть ошибка:

fs/pipe.c:1130: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘pipe_hook’ 
fs/pipe.c:1131: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘set_pipe_hook’ 
fs/pipe.c:1138: error: ‘set_pipe_hook’ undeclared here (not in a function) 
fs/pipe.c:1138: warning: type defaults to ‘int’ in declaration of ‘set_pipe_hook’ 
fs/pipe.c: In function ‘sys_pipe2’: 
fs/pipe.c:1153: error: ‘pipe_hook’ undeclared (first use in this function) 
fs/pipe.c:1153: error: (Each undeclared identifier is reported only once 
fs/pipe.c:1153: error: for each function it appears in.) 
fs/pipe.c:1154: error: implicit declaration of function ‘pipe_hook’ 

я пытался создать свой собственный файл .h и определить pipe_hook_t там, но эр ror был таким же

+0

Если вы объявите typedef прямо перед реализацией 'set_pipe_hook()', вы все равно получите ошибку? Похоже, что вам не хватает 'typedef', возможно, из-за условной компиляции? –

ответ

0

Проблема была решена. Я просто запутал каталог, где находятся файлы заголовков.

Смежные вопросы