2

在 Narwhal 中,我们使用 JNA 来libc调用getcwdchdir. 我只能在对 JNA 接口了解有限的情况下使用它,因为它与 Rhino 中的 JavaScript 相关,专门处理原语。我需要知道如何分配一个 char 缓冲区,以便我可以将它传递给getcwd,从该缓冲区中检索一个 JavaScript 字符串,并取消分配缓冲区,大概是在一个finally子句中。

下面是我们如何抓取libc界面:

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L32-42

下面是如何chdir实现的:

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L438-444

这是我们需要解决方案的地方getcwd

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L416-419

Ruby 或任何其他 JNA 嵌入式语言的解决方案会有所帮助。

4

1 回答 1

1

您可以使用 nio.Buffer 或 jna.Pointer 来传递输出缓冲区,例如:

invokeString(new jna.Memory(4097), 4097)

getcwd 会将 char* 返回到输入缓冲区,因此 jna 会将返回编组为字符串

为了支持更长的路径,您可以采用可选长度

在java中, new File(".").getAbsolutePath() 可以获取当前路径,所以你可能不需要getcwd ...

于 2010-01-24T02:01:11.200 回答