码迷,mamicode.com
首页 > 移动开发 > 详细

10.3、android输入系统_必备Linux编程知识_任意进程双向通信(scoketpair+binder)

时间:2018-06-09 23:23:48      阅读:375      评论:0      收藏:0      [点我收藏+]

标签:arc   one   nfs   目的   文件的   进程间通信   led   ann   server   

3. 任意进程间通信(socketpair_binder)

进程每执行一次open打开文件,都会在内核中有一个file结构体表示它;

对每一个进程在内核中都会有一个task_struct表示进程,这个结构体内部有个files_struct结构体,这个结构体里面有个fdtble结构体,这个结构体里有个struct file **fd,fd就是个数组,fd[open时返回的句柄]就保存的对应文件的file结构体

因此不同进程的文件句柄只在本进程中有含义,如果想要在进程外面使用这个文件句柄,需要让外面进程的fd[任何句柄都可以]指向需要获得的目的进程的file

这里使用binder来传输文件句柄:

(1)APP1  open(file)得到fd1;

(2)通过binder驱动,根据fd1得到file:files->fdt->fd[fd1]

(3)从APP2的files->fdt->fd取出空项fd2,让fd[fd2]指向该file

(4)APP1通过fd1,APP2通过fd2就可以访问同一个file文件了,fd1和fd2不一样


取出APP_0004_Binder_CPP_App V4来修改:
第一次:
git clone https://github.com/weidongshan/APP_0004_Binder_CPP_App.git

更新:
git pull origin

取出指定版本:
git checkout v4 // 兼容APP_0005_Binder_JAVA_App

 

 


参考代码:
frameworks\base\core\jni\android_view_InputChannel.cpp (用binder传文件句柄)
server端写fd: android_view_InputChannel_nativeWriteToParcel
parcel->writeDupFileDescriptor
client端读fd: android_view_InputChannel_nativeReadFromParcel
int rawFd = parcel->readFileDescriptor();
int dupFd = dup(rawFd);

frameworks\native\libs\binder\Parcel.cpp


支持传输文件句柄的程序 v5:
第一次:
git clone https://github.com/weidongshan/APP_0004_Binder_CPP_App.git

更新:
git pull origin

取出指定版本:
git checkout v5 // v5, use binder to transfer file descriptor


编译:
把 APP_0004_Binder_CPP_App 放入 /work/android-5.0.2/frameworks/testing

cd /work/android-5.0.2/
. setenv
lunch //选择单板
mmm frameworks/testing/APP_0004_Binder_CPP_App
cp /work/android-5.0.2/out/target/product/tiny4412/system/bin/test_* /work/nfs_root/android_fs/


测试:
su
busybox mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mnt
logcat HelloService:* GoodbyeService:* TestService:* *:S &
echo asfsdfasdf > 1.txt
./test_server 1.txt &
./test_client readfile

10.3、android输入系统_必备Linux编程知识_任意进程双向通信(scoketpair+binder)

标签:arc   one   nfs   目的   文件的   进程间通信   led   ann   server   

原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/9161570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!