【发布时间】:2012-10-26 00:16:37
【问题描述】:
我正在尝试在 Linux 内核 (3.2.17) 中使用 openDir 进行自定义系统调用期间打开一个目录:
#include <linux/kernel.h>
#include <linux/unistd.h>
#include <linux/types.h> // also tried "asm/types.h"
#include <linux/dirent.h>
#include <linux/stat.h>
asmlinkage
int sys_mycall( const char* srcDir ) {
DIR* dir_p;
struct dirent *dirEntry;
struct stat inode;
dir_p = opendir(srcDir);
...
...
}
但是,编译器找不到它需要的东西
mycall.c:9:5: error: unknown type name ‘DIR’
mycall.c:14:5: error: implicit declaration of function ‘opendir’ [-Werror=implicit-function-declaration]
如果这是一个用户空间应用程序,那么我会#include <dirent.h> 和 <sys/types.h>,但我没有这些可用。编译器似乎没有任何问题可以找到上述头文件,但它显然没有得到它需要的东西。
是否可以从另一个系统调用进行此调用?
我在另一个相关问题中看到有人建议实现或重用所需的系统调用在后台执行的操作,而不是直接调用它。
如果可能的话,有人可以让我知道我需要什么来拨打电话(同样,这是 Linux 3.2.17)。
谢谢。
编辑:
这似乎是要走的路:How do I open a directory at kernel level using the file descriptor for that directory?
【问题讨论】:
标签: linux kernel system-calls opendir