Android 设备描述符,[Android]文件描述符透过Binder传输的原理

在Linux中,文件描述符都是属于进程的,用整数来表示。通过fork,虽然子进程和父进程都是打开同样的文件,但文件描述符却是不同的。 同样的文件描述符值在不同进程对应不同的文件描述符值数组。 所以文件描述符透过Binder来进行传输时,不能是简单的拷贝文件描述符值。 关键是要把对应的文件结构与一个新的文件描述符对应起来,这样另一个进程和原来的进程透过不同的文件描述符对应同一个文件。 幸好,打开文件的结构struct file是可以在进程间共享的,透过进程a的文件描述符来获取struct file,再在进程b中获取一个新的空文件描述符,再把它们关联起来,就实现了文件描述符在不同进程之间的传输。

关键函数及结构 int filedescripter; //透过文件描述符获取打开文件struct file 结构 strcut file = fget(filedescripter)

//获取空的文件描述符 new_fd = task_get_unused_fd_flags(target_proc, O_CLOEXEC);

//建立关联 task_fd_install(target_proc, new_fd,strcut file);

参考: 《 Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析 》 http://blog.csdn.net/luoshengyang/article/details/6666491

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值