我一直致力于在JNI中运行其功能的Android应用。我的问题是在按下按钮之前显示logcat的函数。我发现问题出现在哪里:
FILE *logcat = popen("su -c logcat threadtime", "r");
while (isRunning(running, env, thiz))
if (fgets(&line, sizeof(line), logcat) != NULL) //<--- HERE
appendLogWithToken(logger, line, env, thiz);
我做了一些调试,发现fgets()
会一直睡到收到另一行。我搜索过并发现了类似的问题,但没有合适的答案。是否还有其他函数返回null并且不等待输入,或者这是否可以修复?
答案 0 :(得分:0)
Jonathan给出了一个很好的解释,说明为什么会这样。
您的案例中的一个简单修复是使用logcat -d。 添加-d选项将在当前缓冲区的末尾发送EOF,并允许fgets继续(而不是默认选项监视缓冲区)