Android Native支持的进程数据传输方案

1,有名管道

服务端创建有名管道文件(假设名字为path)

1)access(path.c_str(), F_OK) == -1先判断文件是否已存在;

2)mkfifo(path.c_str(), 0777) != 0就创建了管道文件;

3)open(path.c_str(), O_RDWR|O_NONBLOCK)打开管道文件,之后就可以使用open返回的文件描述符读写管道;

客户端只需要打开管道文件即可使用管道,要求客户端启动晚于服务端。

2,信号量

服务端和客户端都通过sem_open的方式打开信号量,传入参数是信号量的名称,返回值是sem_t指针;

sem_open(path.c_str(), O_CREATE);

sem_close关闭信号量,并且通过sem_unlink把信号量名称解绑;

P操作sem_wait,V操作sem_post;

3,匿名共享内存

1)打开匿名共享内存文件:open("/dev/ashmem", O_RDWR)

2)获取打开文件描述符所指向共享内存大小:ioctl(fd, ASHMEM_GET_SIZE, NULL),如果大小不为0,则可以直接mmap映射mmap(NULL, size, PORT_READ|PORT_WRITE, MAP_SHARED, fd, 0);否则,需要重新申请大小;

3)重新申请:先设置名称ioctl(fd, ASHMEM_SET_NAME, name),然后设置大小ioctl(fd, ASHMEM_SET_SIZE, size),然后映射;

4)共享内存的文件描述符可以通过Android的ParcelFileDescriptor传递到消费者进程;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值