kuc*_*chi 4 android popen android-ndk
Android NDK不支持popen吗?
我读了这页,想知道这是不是真的
POSIX popen()也是如此,但bionic目前不支持它,所以你不能在Android JNI中使用它.相反,您可以使用system()并将输出传递给文件,然后再读取该文件.如果您要在Java中进行渲染,看起来Java方法会更清晰.
但我也读过有人建议使用popen.我也尝试了自己,但有时我的应用程序崩溃,我不知道为什么.
在Android ndk中使用popen是否安全?
小智 7
我认为这取决于您使用的NDK版本
另外在姜饼源树中寻找仿生物,我确实找到了popen的实现.实现可能不是libc的100%posix正确,但它在某种程度上至少是功能性的.
使用NDK v6,以下示例编译没有任何问题,它在我的Android设备上运行.
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fpipe;
char *command="/system/bin/ps";
char line[256];
if ( !(fpipe = (FILE*)popen(command,"r")) ) exit(1)
while ( fgets( line, sizeof line, fpipe))
{
puts(line);
}
pclose(fpipe);
}
Run Code Online (Sandbox Code Playgroud)
更新:看起来比使用vfork()而不是fork()的pre ICS版本,并且已知这些vfork()会导致堆栈损坏.
所以从ICS开始popen应该保存使用,但在早期的Android版本它可用但verry buggy.
归档时间: |
|
查看次数: |
3984 次 |
最近记录: |