Android file fd的传递

来源:互联网 发布:涉密网络审计报告 编辑:程序博客网 时间:2024/06/15 23:34

  很久以前看了某牛的一篇文章, 关于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;


}

 

  唉, 发文庆祝!