UNIX下面的c不是很了解
在windows下面c是做成dll来被java调用的,使用的技术是JNI,很简单的
java之间当然不存在平台问题

解决方案 »

  1.   

    多谢这么快的回复。
    不考虑平台问题,所以应该是3个问题:)
    用JNI调用本地代码是一个方式,不过我的C和JAVA不需要考虑方法的调用,只需要共享数据,比如 windows 上的共享内存、DDE之类的方法,我希望能用类似的方法在C和JAVA之间交换数据。
      

  2.   

    现在我所知的是socket,那么不管哪种情况应该都是可行的,不过还有更好或效率更高的方法么。
      

  3.   

    用JNI调用本地代码是一个方式,不过我的C和JAVA不需要考虑方法的调用,只需要共享数据,比如 windows 上的共享内存、DDE之类的方法,我希望能用类似的方法在C和JAVA之间交换数据。
    ------------
    共享内存是不可能的,你要知道java是在jvm上运行的,java使用的内存是系统分配给jvm的,c是不可能访问到的。我觉得共享本地数据只能考虑数据库或者文件的形式
      

  4.   

    对阿,同意楼上的。本机就利用数据库或者文件,多台机器之间就用socket吧
      

  5.   

    如果用文件或数据库,就存在一个数据是否更新的问题。比如,C程序将数据写入一个文件,JAVA程序并不知道数据已经更新,那么,它就必须不停地访问这个文件,遇有更新,则刷新本端数据。
    因为数据库和文件实际上都已经是把数据写入硬盘,访问也要从硬盘上访问,这样的方式显然比直接在内存中作相应操作效率低得多。而且,如果程序还要求一定的实时性的话,那么读写硬盘的开销就相当惊人了。
    另,不知UNIX下是否也有JNI。
    不知诸位是否还有更好的方法。
      

  6.   

    在UNIX里面为了减小读文件的开销,我有个变通的办法
    一旦数据库有更新就新建一个临时文件标志一下,C读完数据就删除那个文件
    其实这样很麻烦,但是为了语言间的交互没办法
      

  7.   

    即使是只在Java里面共享一些数据,特别是文件,也不是很好处理的,因为你不知道文件什么时候会改,所以你只好不断的去读。
      

  8.   

    看来还是用socket了,原来听说JAVA间通信还可以用RMI,不过对它不了解,好象最终也是用的SOCKET,只不过封装成更友好的形式。
    多谢各位的帮助,给分了。
    我是JAVA的初学者,今后还要请各位多帮忙,谢谢。