我想将 Linux C 程序移植到 Java。该程序控制使用 USB 电缆连接到 PC 的相机。 C 代码使用 Linux SCSI Generic (sg)。
C 程序的示例代码:
#include <linux/../scsi/sg.h>
...
static int scsi_write(int sg_fd, uint8_t *cmd, uint32_t cmdLen,
uint8_t *buf, uint32_t bufLen) {
sg_io_hdr_t io;
int r;
memset(&io, 0, sizeof(io));
io.interface_id = 'S';
io.cmd_len = cmdLen;
...
r = ioctl(sg_fd, SG_IO, &io);
...
}
有没有办法将此程序移植到 Java?我正在寻找为 Java 编写的跨平台 SCSI 库,但没有找到。我也在寻找基于 SCSI/sg 的 JNI,但也不走运。
最佳答案
虽然 Java 支持很多 POSIX API,但 ioctl
系统调用并不是它的一部分。您需要做的是使用 JNI 允许 Java 调用函数,例如您在问题中编写的 scsi_write
。考虑到您无论如何都在谈论与外部硬件的接口(interface),使用更多垫片的额外成本是微乎其微的。 cmd
和 buf
参数自然地映射到 Java 字节数组(并且由于 Java 的数组知道它们的长度,因此您不会对 cmdLen
和 bufLen
Java 级别的参数)。
关于Java scsi访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497711/