在android sdk路径中sdk / bionic / libc / bionic /有C API资源代码,例如fork.c,ioctl.c等。当打开ioctl.c时:
#include <stdarg.h>
extern int __ioctl(int, int, void *);
int ioctl(int fd, int request, ...)
{
va_list ap;
void * arg;
enter code here
va_start(ap, request);
arg = va_arg(ap, void *);
va_end(ap);
return __ioctl(fd, request, arg);
}
extern int __ioctl(int,int,void *);这意味着__ioctl(int,int,void *)已在某处定义。所以我想知道原定义的地方在哪里。非常感谢!
答案 0 :(得分:1)
如上所述,_ ioctl只是系统调用的包装器,在asm中实现。 在AOSP代码中,它可以在bionic / libc / arch-XXX / syscalls / _ioctl.S中找到,其中arch-XXX是arch-arm,arch-x86或arch-mips,具体取决于您的目标体系结构。 / p>
答案 1 :(得分:0)
它可能在仿生树的其他地方(grep是你的朋友),或者作为构建过程的一部分自动生成,但无论哪种方式,它都完全无趣。它只是一个系统调用包装器。所有有趣的工作都在内核中。