很久以前看了某牛的一篇文章, 关于android上server和client之间的fd传递,简简单单一个dup就行。记得unix高级编程上说过的,dup是用在父子进程或者本进程内,而不同进程是不行的。对于此疑惑本人是缠绵悱恻了很久,详细阅读了linux实现代码,但却久久不得解脱。
漫漫长夜,今日终得光明。原来android的binder driver 在kernel中把server的file entry 拷贝了一份给client。
case BINDER_TYPE_FD: {
int target_fd; struct file *file;
file = fget(fp->handle);
target_fd = task_get_un used_fd_flags(target_proc, O_CLOEXEC);
task_fd_install(target_proc, target_fd, file);
fp->handle = target_fd;
}
唉, 发文庆祝!