哪些是安卓系统中不可用的最重要的POSIX功能
What are the most important POSIX functions not available in Android?
我即将把一个大型C++项目(某种库项目,它完全不包含GUI)移植到Android。它实际上是一个Visual C++项目,但它将作为中间步骤移植到Linux。我知道Android不是一个"完整的"Linux,也没有声称提供所有的POSIX功能,但我也知道使用NDK在Android上有很多"POSIXish功能"。
现在我的实际问题是:
与完整的POSIX相比,哪些是Android上不可用的最大/最重要的功能?因此,在进行从Visual C++到Linux GCC的移植时,我可以记住这一点。
我试着在谷歌上找到一些东西,但没有发现任何真正有用的东西,只是偶尔有一些东西提到安卓上有一些POSIX功能。。。
Bionic被谷歌重新编码。它很小,但针对Android进行了优化。
据我所知,它真正缺少的一件大事就是pthread_cancel()
函数。
我的经验是,如果你成功地将它移植到GNU/Linux,而没有pthread_cancel()
调用,那么你应该基本上没事
顺便说一句,你想建一个什么样的图书馆?它用什么?网络,线程。。。
PS:即使是Linux也不是完全的POSIX。
仿生维基百科页面
https://en.wikipedia.org/wiki/Bionic_(软件)#Differences_from_POSIX
还有一些有趣的信息:
尽管bionic的目标是实现所有C11和POSIX,但(截至奥利奥)libc中仍然缺少大约70个POSIX函数[8]。还有一些POSIX函数,如endgwent/getpwent/setpwent家族,由于缺乏密码数据库,因此不适用于Android。截至奥利奥,libm已完成。
出于安全原因,有些函数故意不符合POSIX或C标准,例如printf,它不支持%n格式字符串。[9]
官方仿生树文档报价
https://android.googlesource.com/platform/bionic/+/37ad9597839c70a7ec79578e5072df9c189fc830/docs/status.md
跑步/libc/tools/check-symbols-glibc.py在bionic/中,用于glibc而非bionic实现的POSIX函数的当前列表。目前(2017-10):
aio_cancel aio_error aio_fsync aio_read aio_return aio_suspend aio_write lio_listio pthread_cancel pthread_mutex_consistent pthread_mutex_getprioceiling pthread_mutex_setprioceiling pthread_mutexattr_getprioceiling pthread_mutexattr_getprotocol pthread_mutexattr_getrobust pthread_mutexattr_setprioceiling pthread_mutexattr_setprotocol pthread_mutexattr_setrobust pthread_setcancelstate pthread_setcanceltype pthread_testcancel wordexp wordfree libm
当前libm符号:https://android.googlesource.com/platform/bionic/+/master/libm/libm.map.txt
剩余0个缺少POSIX libm函数。
缺少的最明显的功能是pthread_cancel()
。
此博客包含一些其他详细信息:http://codingrelic.geekhold.com/2008/11/six-million-dollar-libc.html
Bionic的良好概述:https://android-platform.googlegroups.com/attach/0f8eba5ecb95c6f4/OVERVIEW.TXT?gda=HWJaO0UAAAB1RXoVyyH5sRXFfLYnAq48KOFqr-45Jqvtfia6gxIj4Qe8cBqW3BaWdSUPWi_jHqO3f1cykW9hbJ1ju6H3kglGu1iLHeqhw4ZZRj3RjJ_-A&视图=1&part=4
共享内存在android中也有不同的实现方式。在尝试在android内核上使用shm_open和shm_onlink时受到了沉重打击。Android实现了异步共享内存(ashmem)。
- 查找最接近的大于当前数字的数字的索引
- 两个文件使用彼此的功能-如何解决
- 数组中最大的非重复元素
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- 从未签名的长期错误中获得最多的32位重要位
- 模棱两可的功能超载[例如最大限度()]
- 将所有位低于最重要的设置位零的最有效方法是什么?
- 在外部功能中具有一个变量初始化或内部功能中的多个初始化是最有效的
- C 使用功能定义中的if/其他语句以返回最小的数字
- P2P最重要的基础知识
- 哪些是安卓系统中不可用的最重要的POSIX功能
- 如何在C++中获取字符中最不重要的部分
- C++查找最大值和最小值的功能
- 不是最重要的const.但这是什么
- 传递常量引用…它像最重要的const一样工作吗
- 检索结构中最接近的X和Y的功能?
- 最重要的常量和右值参考
- 位操作 - 如何在C++中获取字符中最不重要的 3 位
- 基数排序,最重要的先排序或者最不重要的先排序,这样更快