0 0

如何将下列方法(C程序)改成用java实现0


//打开设备
int ctUsb_open(int devId)
{
    int handle = -1;
    CTUsbMsg msg;
    int msglen, incnt;
    memset(&msg, 0, sizeof(msg));
    snprintf(msg.msgData, sizeof(msg.msgData), "OPEN");
    msg.msgLen = strlen(msg.msgData) + sizeof(devId);
    memcpy(&msg.msgData[4], &devId, sizeof(devId));

    int xreason;
    handle = ctUsb_connect(USB_ADMIN_DATA_PORT);

    if (handle > 0)
    {
        write(handle, &msg, msg.msgLen + sizeof(msg.msgLen));
        incnt = ctUsb_msgRecive(handle, &msglen, sizeof(msglen));
        if (incnt > 0)
        {
            ctUsb_msgRecive(handle, &xreason, msglen);
        }
    }

    g_errno = xreason;

    return handle;
}
//创建socket连接
static int ctUsb_connect(int portNum)
{
    int sockfd, addrsize;

    struct sockaddr_in seraddr;

    memset(&seraddr, 0, sizeof(seraddr));

    seraddr.sin_family = AF_INET;
    seraddr.sin_port = htons(portNum);
    seraddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    addrsize = sizeof(struct sockaddr_in);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    if (sockfd < 0)
    {
        printf("could not create socket\n");
    }

    if (connect(sockfd, (struct sockaddr*)&seraddr, addrsize) == -1)
    {
        printf("could not connect usbAdmin\n");
        close(sockfd);
        sockfd = -1;
    }

    return sockfd;
}
/**
 * 配置设备属性
 * @param handle(IN)
 * @param request(IN)
 * @param arg(IN/OUT)
 * @param reason(OUT)
 * @return Result
 */
int ctUsb_ioctl(int handle, int request, void *arg, int arglen)
{
    CTUsbMsg msg;
    int len, xreason, n;
    int requestx = request;
   
    memset(&msg, 0, sizeof(msg));
    snprintf(msg.msgData, sizeof(msg.msgData), "IOCTL");
    len = strlen(msg.msgData);

    memcpy(&msg.msgData[len], &requestx, sizeof(requestx));
    memcpy(&msg.msgData[len + 4], &arglen, sizeof(arglen));

    if (arg != NULL)
    {
        memcpy(&msg.msgData[len + 8], arg, arglen);
    }

    msg.msgLen = 5 + sizeof(requestx) + arglen;

    write(handle, &msg, msg.msgLen + sizeof(msg.msgLen));

    n = ctUsb_msgRecive(handle, &len, sizeof(len));

    if (n > 0)
    {
        ctUsb_msgRecive(handle, (char*)arg, len);
    }

    n = ctUsb_msgRecive(handle, &len, sizeof(len));

    if (n > 0)
    {
        ctUsb_msgRecive(handle, &xreason, len);
    }

    g_errno = xreason;

    return 0;
}

为了方便理解,我用java写一个调用的方法:
public static void main(String[] args){
    int handle=open(devcId);//创建socket连接  此处handle是什么意思,接着调用ctUsb_ioctl方法要把此handle 传给 ctUsb_ioctl方法,(我自己的理解表示socket对象,但在java中要 怎么用int 类型的变量代表一个socket对象呢)
    ctUsb_ioctl(handle,......)//
}

 

请大家帮忙给分析一下 C的程序流程,考虑用java如何实现!!!先拜谢了!!


问题补充:大家来给点意见吧,其实就是要将C写的程序完全用java再写一遍,上述方法中的write(handle, &msg, msg.msgLen + sizeof(msg.msgLen)); write函数将msg中的msg.msgLen + sizeof(msg.msgLen)); 字节内容写入文件描述符handle.成功时返回写的字节数.失败时返回-1;handle代码文件描述符,我在想是不是对应java中OutputStream的write(byte[] b,int off,int len)方法呢?该方法从指定的字节数组开始到当前输出流关闭写入len字节。一般的合约write(b, off, len),一些在数组b中的字节写入,以便输出流;元素b[off]是写入的第一个字节和b[off+len-1]是写的这个操作的最后一个字节!!不知道这种想法对吗?请大家给点意见。
2014年7月25日 09:15

1个答案 按时间排序 按投票排序

0 0

采纳的答案

我可以帮你实现  但是现在不在电脑旁   先mark下   回头出码要分

2014年7月25日 15:00

相关推荐

    java 快速排序 折半查找的界面实现 (递归与分治法)

    这通常需要使用Java的Swing或JavaFX库来构建。用户可以输入一组数字,点击“快速排序”按钮进行排序,然后输入要查找的值,点击“折半查找”按钮进行搜索,结果会显示在界面上。 总的来说,快速排序和折半查找是...

    JAVA程序设计习题库及答案(非常全面)

    10. **题目:** 在当前的java实现中,每个编译单元就是一个以()为后缀的文件 - A. java - B. class - C. doc - D. exe **解析:** Java源代码文件的后缀是.java。这些源代码文件经过编译后会生成.class文件,...

    C语言程序设计C语言程序设计C语言程序设计C语言程序设计第三版答案

    ### C语言程序设计知识点解析 #### 一、输出指定格式的信息 **题目**: 编写一个C程序,输出以下信息: ``` ************************** Very Good! ************************** ``` **解析**: 1. **函数**: `main...

    《Java程序设计》课程实验指导书程序代码(答案)(实验七)  

    实验七 Java多线程 一、实验目的: 熟悉利用Thread类建立多线程方法。 熟悉利用Thread接口建立多线程方法...通过将扩展Thread类建立多线程的方法改为利用Runnable接口的方法,掌握通过Runnable接口建立多线程的方法。

    java实现的日期操作类

    标题提到的"java实现的日期操作类"通常指的是使用这些类来完成特定的日期计算任务,如获取星期几或计算未来的日期。 `java.util.Date`是Java早期用来表示日期和时间的类,但它的API设计并不理想,易用性较差。因此...

    java基于UDP协议的聊天程序(完整版)

    Java基于UDP协议的聊天程序是一种实现网络通信的应用实例,它利用了无连接的用户数据报协议(User Datagram Protocol,简称UDP)进行数据传输。在这个完整版的程序中,开发者已经完成了从设计到调试的全部过程,使其...

    《Java程序设计》上机实验.doc

    【Java程序设计上机实验】 实验1主要涵盖了Java的基础知识,包括环境配置、程序结构、条件判断和数学函数的使用。...通过这些实验,学生将全面了解Java程序设计的基础和实践,为后续的高级编程概念打下坚实基础。

    Java面向对象程序设计课后答案

    (2) **编译Java源程序**:使用Java编译器(`javac.exe`)编译Java源程序,生成`.class`字节码文件。 (3) **运行Java程序**:使用Java解释器(`java.exe`)运行Java程序。 **3. Java源文件由什么组成?** Java...

    自考04747《Java语言程序设计》课后习题答案全集.doc

    1.9 指出下列内容哪些是JAVA语言的整型常量,哪些是浮点数类型常量,哪些两者都不是。 6 第二章 运算和语句 7 2.1 Java的字符能参加算术运算吗? 7 2.2 占字节多的变量能直接赋值给占字节少的变量么? 7 2.3 试用...

    Java3D实现三维显示

    Java3D 实现三维显示 Java3D 是基于 Java 平台的三维技术,用于实现三维显示。Java3D 提供了基于 Java 的上层接口,使 3D 技术变得不再繁琐,并且可以加入到 J2SE、J2EE 的整套架构。Java3D 建立在 JAVA2(JAVA1.2)...

    Java程序设计基础:调用方法-方法的嵌套调用.pptx

    能用方法嵌套调用解决相对比较复杂的问题,如十进制整数转换成十六进制数问题。 在定义方法时,一个方法内不能再定义另一个方法,即不能嵌套定义,但是在调用一个方法的过程中,还可以调用另一个方法,这是方法的...

    《Java程序设计》课程实验指导书程序代码(答案)(实验四)

    (4)Point3D有一个void型成员方法offset(int a, int b,int c),该方法可以实现Point3D的平移。 (5)在Point3D中的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point2D的对象...

    java面试题

    - 选项:(A) Java面向对象语言容许单独的过程与函数存在 (B) Java面向对象语言容许单独的方法存在 (C) Java语言中的方法属于类中的成员(member) (D) Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数...

    JAVA程序设计习题库及答案(免费下载)

    10. **题目:** 在当前的java实现中,每个编译单元就是一个以()为后缀的文件 - **答案:** A. java **解析:** Java源代码文件通常以`.java`作为后缀。 **二、填空题解析** 1. **题目:** 1991年,SUN公司的Jame...

    Java实验指导书_31

    另一种实现是利用Java的`Arrays.sort()`方法对数组进行排序,然后直接返回最后一个元素,即为最大值。 - `printSecond`方法:这个方法需要找出数组中第二大的数。一种方法是在找到最大值后,再次遍历数组,找出比...

    JAVA面试题

    从给定的文件信息来看,这是一份针对Java技术的面试题库,涵盖了单选题、填空题、代码分析题以及编程题等不同类型的题目,旨在全面考察应聘者对Java语言及其应用环境的理解和掌握程度。下面我们将深入解析这份资料中...

    java面向对象程序设计习题大全

    - 编写一个程序,实现将一个字符串按指定字符分割并统计各个子字符串出现的次数。 - 示例输入:`"apple,orange,banana,apple,grape,orange"` - 示例输出:`apple: 2, orange: 2, banana: 1, grape: 1` - **解题...

Global site tag (gtag.js) - Google Analytics