【问题标题】:Does Android support setjmp/longjmp, access, chdir, getcwd?Android 是否支持 setjmp/longjmp、access、chdir、getcwd?
【发布时间】:2011-03-12 17:52:50
【问题描述】:

我是 Android 开发的新手,我想知道 Android 是否支持上述 C 语言中的功能。

提前致谢。

【问题讨论】:

    标签: android android-ndk c-libraries


    【解决方案1】:

    这些函数在通过 Android NDK 以原生 C 进行编码时可用。 NDK 有一个包含这些函数的标准 C 库。

    • getcwd(buf, size) 函数与 Unix 标准略有不同,如果 buf 为 NULL,它不会分配内存。您应该预先分配缓冲区。 http://linux.die.net/man/2/chdir
    • chdir(path) 按预期运行,尽管它的使用受限于 Android(愚蠢地)不提供检索应用程序上下文相关信息的功能,例如外部存储的路径(尽管您可以检索路径通过 JNI 调用。)http://linux.die.net/man/3/getcwd
    • 我无法评论 Android 中 longjmp 等的功能。

    如果你更喜欢留在Android Java环境中,你会发现没有当前工作目录的概念,所以chdir()和getcwd()已经过时了。相反,系统提供了一组用于发现内部和外部存储路径的功能(请参阅http://developer.android.com/guide/topics/data/data-storage.html)。此外,setjmp()/longjmp() 的典型用法通常可以被 Java 异常或其他机制覆盖。

    【讨论】:

    • POSIX getcwd 中的 size 参数为 0 是未指定的行为。 Android 实现仍然是一致的。分配内存的行为其实是an extension to POSIX.1-2001。你提到的 Unix 标准是不正确的。
    【解决方案2】:

    你不应该需要它们。 Android 应用程序通常使用 Java 完成。 setjmp/longjmp 是一个 C/C++ 的东西(是的,我用它编程了一段时间,仍然讨厌它 :-)

    【讨论】:

      【解决方案3】:

      不确定它是否已将这些集成到语言中,但如果您确实需要访问任何 Native C 方法,您可以使用 JNI(Java Native Interface),它可以让您运行 Native C 代码。

      另外,看看 Exception 和 File 类 - 它们可能会为您提供类似的功能。

      【讨论】:

      • hm 我想可能如你所说。就 JNI 而言,我将寻找更多相关信息。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 2021-01-18
      • 2016-03-22
      相关资源
      最近更新 更多