免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3234 | 回复: 8
打印 上一主题 下一主题

Windows系统Jdk中定义的native方法的.h和.dll在哪 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-17 21:23 |只看该作者 |倒序浏览
在java.io.File中的rename()的实现如下:
    static private FileSystem fs = FileSystem.getFileSystem();

    public boolean renameTo(File dest) {
        SecurityManager security = System.getSecurityManager();
        if (security != null) {
            security.checkWrite(path);
            security.checkWrite(dest.path);
        }
        return fs.rename(this, dest);
    }

其中FileSystem中定义有

    public static native FileSystem getFileSystem();
这是一个native函数,会调用本地函数来完成其功能,然后再调用
Win32FileSystem中的函数,Win32FileSystem中的大部分函数都是native的,则可以完成所要功能,请问这些native函数的.h和.dll文件在哪?
谢谢

论坛徽章:
0
2 [报告]
发表于 2005-12-17 23:44 |只看该作者
This is  the implement of java virtual machine ,it isn't public.only dll file is public,it's jvm.dll.

论坛徽章:
0
3 [报告]
发表于 2005-12-19 18:29 |只看该作者
原帖由 xiaofei104 于 2005-12-17 23:44 发表
This is  the implement of java virtual machine ,it isn't public.only dll file is public,it's jvm.dll.

thanks
I wrote a method to batch rename a series of files,and I found there was one method renameTo(File dest) in the java.io.File, so I only wanted to check out how they programed this method at first. but it looks impossible for the reason now.

how about other jvm implementations?

论坛徽章:
0
4 [报告]
发表于 2005-12-19 19:11 |只看该作者
你可以到sun的网站上下载JDK的源码

论坛徽章:
0
5 [报告]
发表于 2005-12-19 20:31 |只看该作者
原帖由 sakulagi 于 2005-12-19 19:11 发表
你可以到sun的网站上下载JDK的源码

最初提问题的时候就是看了JDK的源码以后提得问题,xiaofei104的回答是jvm.dll是实现了这些函数的东西。这样就不能看到sun是如何实现这些函数( java.io.File.renameTo()、java.io.File.delete() )了

论坛徽章:
0
6 [报告]
发表于 2005-12-19 21:26 |只看该作者
现在JVM不开源吗?

这些本地的method没有兴趣看了,再看就不是JAVA了

论坛徽章:
0
7 [报告]
发表于 2005-12-20 08:13 |只看该作者
原帖由 gp101224 于 2005-12-19 20:31 发表

最初提问题的时候就是看了JDK的源码以后提得问题,xiaofei104的回答是jvm.dll是实现了这些函数的东西。这样就不能看到sun是如何实现这些函数( java.io.File.renameTo()、java.io.File.delete() )了

明白楼主的意思。可是所有的native方法也都是有c语言的源码的啊?楼主再仔细找找?比如:

  1. JNIEXPORT jboolean JNICALL
  2. Java_java_io_Win32FileSystem_rename0(JNIEnv *env, jobject this,
  3.                                      jobject from, jobject to)
  4. {
  5.     jboolean rv = JNI_FALSE;

  6.     WITH_NATIVE_PATH(env, from, ids.path, fromPath) {
  7.         WITH_NATIVE_PATH(env, to, ids.path, toPath) {
  8.             if (rename(fromPath, toPath) == 0) {
  9.                 rv = JNI_TRUE;
  10.             }
  11.         } END_NATIVE_PATH(env, toPath);
  12.     } END_NATIVE_PATH(env, fromPath);
  13.     return rv;
  14. }

复制代码

论坛徽章:
0
8 [报告]
发表于 2005-12-20 12:44 |只看该作者
原帖由 sakulagi 于 2005-12-20 08:13 发表

明白楼主的意思。可是所有的native方法也都是有c语言的源码的啊?楼主再仔细找找?比如:
[code]
JNIEXPORT jboolean JNICALL
Java_java_io_Win32FileSystem_rename0(JNIEnv *env, jobject this,
          ...

谢谢斑竹
看一下,不过c代码这样写,看起来很难受

论坛徽章:
0
9 [报告]
发表于 2005-12-20 16:04 |只看该作者
其实就是宏多了一些。呵呵。还不算太难懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP