首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java scsi访问

Java scsi访问
EN

Stack Overflow用户
提问于 2010-12-21 17:12:29
回答 3查看 1.2K关注 0票数 1

我想把一个Linux C程序移植到Java上。此程序控制通过USB电缆连接到PC的摄像机。C代码使用Linux SCSI Generic (sg)。

C程序中的示例代码:

代码语言:javascript
复制
#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,也没找到。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-21 17:21:37

虽然Java支持很多POSIX API,但ioctl系统调用不是它的一部分。您需要做的是使用JNI来允许Java调用一个函数,比如您在问题中编写的scsi_write。考虑到您正在谈论的是与外部硬件的接口,使用更多垫片的额外成本是最小的。cmdbuf参数自然地映射到Java数组(因为Java数组知道它们的长度,所以根本不需要在Java级对cmdLenbufLen参数建模)。

票数 3
EN

Stack Overflow用户

发布于 2010-12-21 17:34:16

您可能会更幸运地使用基于Java的USB库,比如JSR080 (javax.usb)的实现。您可以找到参考实现here,但只有Linux实现才是一种生产准备。

票数 2
EN

Stack Overflow用户

发布于 2019-04-01 10:10:18

请尝试IOCTL,你可能想看看sg3_utils源代码,以了解如何通过ioctl发送SCSI PDU,它是C代码,但PDU和ioctl是相同的。然后你就知道你可以控制摄像机了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4497711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档