ueventd 在哪里创建/dev/socket?有代码可以演示吗
时间: 2023-11-28 20:04:50 浏览: 40
在 Android 系统中,ueventd 的源代码位于 system/core/rootdir/init.rc 文件中。在 init.rc 文件中,可以看到 ueventd 的启动命令:
```
service ueventd /sbin/ueventd
class core
socket ueventd stream 0660 root system
oneshot
```
其中,socket 命令用于创建一个名为 ueventd 的 UNIX 域套接字,并指定了套接字的类型、权限和属主。
在 ueventd 的源代码中,可以看到相关的代码实现。具体来说,ueventd 的 main 函数会创建一个名为 uevent_socket 的 UNIX 域套接字,并将其绑定到 /dev/socket/ueventd 上:
```
int main(int argc, char **argv) {
// ...
int uevent_fd = android_get_control_socket("uevent");
if (uevent_fd < 0) {
ALOGE("ueventd - failed to get socket 'uevent'");
return 1;
}
// Bind the socket.
if (bind(uevent_fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
ALOGE("ueventd - failed to bind socket: %s", strerror(errno));
return 1;
}
// ...
}
```
这段代码中,android_get_control_socket 函数用于获取名为 "uevent" 的控制套接字,即上面 init.rc 中定义的 ueventd 套接字。在获取到套接字后,将其绑定到一个名为 addr 的 sockaddr_un 结构体上,并使用 bind 函数将其绑定到 /dev/socket/ueventd 上。
总之,ueventd 的源代码中包含了创建和绑定 UNIX 域套接字的相关代码实现。