1

在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 *) 已在某处定义。所以我想知道原来定义的地方在哪里。非常感谢!

4

2 回答 2

1

如前所述,_ioctl 只是系统调用的包装器,在 asm 中实现。在 AOSP 代码中,可以在 bionic/libc/arch-XXX/syscalls/ _ioctl.S 中找到它,其中 arch-XXX 是 arch-arm、arch-x86 或 arch-mips,具体取决于您的目标架构。

于 2013-10-05T07:00:11.533 回答
0

它可能在仿生树的其他地方(grep 是你的朋友),或者作为构建过程的一部分自动生成,但无论哪种方式,它都是完全无趣的。它只是一个系统调用包装器。所有有趣的工作都在内核中。

于 2013-10-05T04:45:24.087 回答