【问题标题】:Calling c file in android java: fgets() function doesn't working on HTC Desire在 android java 中调用 c 文件:fgets() 函数在 HTC Desire 上不起作用
【发布时间】:2014-07-05 14:46:43
【问题描述】:

我有一个包含 fgets 函数的 C 代码,我从 android java 调用此代码。

我在 2 部手机(三星 Galaxy 和索尼 Xperia)上运行此应用,一切正常。

但是当我在 HTC Desire 300 和 500 上运行该应用程序时,该应用程序停止在 fgets 函数!!。

这是使应用停止的命令:

line = fgets(buf, (int)sizeof(buf), modem);

其中:{EDIT1}

static char buf[4 * 1024];
FILE *modem;
char *line="AT\r";
char q[4 * 1024 * 10];

modem = fopen("/dev/smd0", "r+b");
if (modem == NULL) 
{
    return (*env)->NewStringUTF(env, "2fopen() failed: /dev/smd0\n");
}

res = fputs(line, modem);
if (res < 0)
{
     return (*env)->NewStringUTF(env, ("5failed to send '%s' to modem res = " + res,line)); 
}
line = fgets(buf, (int)sizeof(buf), modem);

EDIT2:

logCat中的错误是这样的:

Tag:     HTCBuildFlagAdpater 
Text:    Fail to get htc sku id by customization

这个问题代表什么? 有什么命令可以代替它吗?

【问题讨论】:

  • 你想读什么?一些特定的硬件?
  • 你在哪里打开文件?它在外部存储上吗? (顺便说一句,你永远不应该对"/sdcard/" 进行硬编码。)你确定调制解调器变量不为NULL,并且已初始化吗?
  • @greenapps 是的,我正在尝试从手机的调制解调器中读取一些低级信息。
  • @Sipka 我将编辑 Q. 以添加目录。是的,我敢肯定,因为正如我在 Q 中所说,相同的代码在另一台设备上完美运行。
  • 无法理解您可以在以读取模式打开的文件上使用 fputs。

标签: java android c mobile android-ndk


【解决方案1】:

哪些观察导致应用程序停止在该行的结论?

“停止”是指应用程序在该行挂起,还是应用程序终止?

如果是前者,它可能一直在等待来自设备的输入。

如果是后者,他们的 C 实现中可能存在错误,但这比后来发现应用程序实际上并未终止于您认为的代码点的可能性要小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2012-01-27
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多