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程序设计阅读程序写结果题22道

    《java程序设计》课程的题库资料,由贺州学院整理,可供学生期末课程复习使用,也可以供相关任课教师出卷使用。 内容示例为: 9. 阅读下列程序片段,写出运行结果。 public class Test { public static void main...

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

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

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

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

    java程序设计预赛

     Java程序设计 一、单选题(共计60题) (1) 下列有关事件监听器的描述正确的是(C)。  A、一个监听器只能接受一个组件产生的事件  B、只有一个监听器可以被附加到一个组件上  C、多个监听器可以被附加到一个...

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

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

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

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

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

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

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

    完整版的,经过调试的一个java环境下的基于UDP协议的聊天程序,udp协议聊天程序、java开发、计算机网络课程设计

    java实现矩阵转置

    本代码展示了矩阵的转置,通过提示,输入想要转置的矩阵,完成该矩阵的转置

    java程序输出菱形

    用java语言编写输出菱形的小程序

    c语言程序设计习题与上机实验指导

    A) 程序中的第一条可执行语句〖〗B) 程序中的第一个函数〖〗 C) main函数〖〗D) 包含文件中的第一个函数分析:在一个C语言源程序中,无论main函数书写在程序的前部,还是后部,程序的执行总是从main函数开始,并且在...

    java实现二维数组转置

    用java实现二维数组的转置,1.输入想要创建的数组的维数M;2.分别输入M行数组元素;3.打印数组;4.数组转置;5.打印转置后的数组

    java实现的日期操作类

    java计算星期几,java计算后几天的日期) 收藏 一个简单的相对的较为完善的日期操作类

    Java程序设计复习题.docx.docx

    Java语言规定构造方法名与类名必须相同 Java语言规定构造方法没有返回值,但不用void声明 Java语言规定构造方法不可以重载 Java语言规定构造方法只能通过new自动调用 下列叙述中错误的是 D 。 Java Application与...

    Java程序设计复习题.doc

    在Java程序中import语句可以没有 C.在Java程序中import语句必须有一个 D.在Java程序中import语句引入在所有类定义之前 5. 在编译Java程序时,用于指定生成.class文件位置的选项是 B 。 A.-g B.-d C.-verbose D...

    选择结构程序设计-C语言程序实验报告.doc

    安 徽 工 程 大 学 高级语言程序设计 实 验 报 告 班级 姓名 同组者 / 成绩 日期 2019.10.10 指导教师 实验名称 选择结构程序设计 1. 实验目的 学会正确使用关系...用switch语句来实现。 3. 输入4个整数,要求按从

    Java程序设计复习题.docx

    一、单选题:(每题1分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项的标记写在题干后的括号内。 1.下列语句序列执行后,k 的值是( B )。 int m=3, n=6, k=0; while( (m++) ( -- n...

    1Java程序设计复习题.doc

    在Java程序中import语句可以没有 C.在Java程序中import语句必须有一个 D.在Java程序中import语句引入在所有类定义之前 5. 在编译Java程序时,用于指定生成.class文件位置的选项是 B 。 A.-g B.-d C.-verbose D...

    Java实验指导书_21

    实验要求:编写一个Java应用程序,实现下列功能:程序随机分配给客户一个1—100之间的整数用户在输入对话框中输入自己的猜测程序返回提示信息,提示信息分别是:

    JAVA高级程序设计测试题含答案.docx

    JAVA高级程序设计测试题含答案 JAVA高级...第14题 【单选题】【2.00分】【概念理解】 哪个方法是实现Runnable接口必须实现的 [单选题] * JAVA高级程序设计测试题含答案全文共43页,当前为第4页。 A. wait() B. run()

Global site tag (gtag.js) - Google Analytics