fair_jm
跨平台没错 但你要了解点平台知识

好吧 实在是闲的没事 就把原来的一些笔记翻出来看了看 翻到个比较有意思的

我是java小白一只

群里有个人说出现了个不能读取java的错误信息(后来发现是文件没传完啊 怨念! 而不是文件找不到或者文件名等其他原因)

然后就想是不是因为文件被占用了 于是写了个小东西试试看:

[mw_shl_code=java,true]import java.io.*;

import java.nio.*;

import java.nio.channels.*;

public class TryLock{

public static void main(String args[]) throws Exception{

File file=new File("Text.java");

FileOutputStream pis=new FileOutputStream(file,true);

FileChannel fc=pis.getChannel();

FileLock fl=fc.tryLock();

System.out.println(fl);

Thread.sleep(30*1000);

if(fl!=null){

fl.release();

}

fc.close();

}

}[/mw_shl_code]

很简单的一个小例子

Text.java无非就是helloworld之类的

以上是用来锁的代码在win下我先在一个cmd下运行这个程序然后我在30s内在另一个cmd下用javacText.java 会出现:

读取Text.java时出错,另一个程序已锁定文件的一部分,进程无法访问

本来以上就结了

但那时(其实也就1个月前啦)还装了ubuntu 12.04(gnome常常卡死不动啊有木有......)

然后就在那边也试着运行了下:

居然发现可以在锁定的情况下正常编译那个Text.java 甚至可以修改 删除........

瞬间不淡定了....去csdn上问 回答说 在linux内核的系统中你甚至可以直接删除运行的程序......

这就对跨平台的结果一致性产生了冲击 但问题的本身还是来源于系统底层的本身 系统本身允许了这样的行为 和跨平台本身没关

所以 这一结果对于java的跨平台是没错的

但你要了解点平台的知识 不然会出现让你很费解的情况(我以上的例子.....)

以上..

需要更有有关linux内核的系统关于删除运行时文件的说明?:

http://bbs.chinaunix.net/thread-1702707-1-1.html

nongeek
我误会了
展开Biu

fair_jm 发表于 2012-8-30 12:42

我误会了 哈哈

不过这文章和我给的那个链接里的又有点不一样

..这文章说是不建议会带来损害 但那篇说的是 ...

其实我说那篇文章就是你的链接那个帖子里面的某个回复...

所以我一开始就以为你已经看过了...@43#

SSH 并发实践...我才是小白@125#

[查看全文]
fair_jm
我是指的
展开Biu

nongeek 发表于 2012-8-30 12:22

不不不,我是指的 那篇文章提到的cp那个问题...囧

http://blog.kangkang.org/index.php/archives/49[/back ...

我误会了 哈哈

不过这文章和我给的那个链接里的又有点不一样

..这文章说是不建议会带来损害 但那篇说的是没有关系 实际内容其实是锁定了inode了

也许05年那个真算个bug也不一定~~

底层的东西有时间再看了 毕竟还只是一个小白

现在已经挖了好几个大坑 什么SSH啊 并发实践啊之类的 在填补中....

谢谢指导了@152-

[查看全文]
nongeek
本帖最后由
展开Biu

本帖最后由 nongeek 于 2012-8-30 12:25 编辑

fair_jm 发表于 2012-8-30 11:39

这不能算是bug吧 因为我做这个实验是在一个月前 内核是3.4.*的 ubuntu12.04LTS

不不不,我是指的 那篇文章提到的cp那个问题...囧

http://blog.kangkang.org/index.php/archives/49

我一直都在说这里面讲的...

[查看全文]
fair_jm
我还以为
展开Biu

nongeek 发表于 2012-8-30 01:13

我还以为lz已经搞清楚了的说...

嗯,那个帖子是05年,如果照他的意思应该是一个bug吧

这不能算是bug吧 因为我做这个实验是在一个月前 内核是3.4.*的 ubuntu12.04LTS

[查看全文]
nongeek
也是这样的
展开Biu

fair_jm 发表于 2012-8-30 00:43

漏洞?

貌似unix也是这样的 我不相信内核更新速度比win快的linux连这个也修补不好~~

对于底层实在不懂呢 ...

我还以为lz已经搞清楚了的说...

嗯,那个帖子是05年,如果照他的意思应该是一个bug吧

只是不知道现在fix了没有,手边没有linux

inode的那个明白了的,rm的话实际上就是将inode的链接数减掉1,

当inode链接数为0的时候才会真正地删除文件

[查看全文]
fair_jm
看了这个没有
展开Biu

nongeek 发表于 2012-8-29 22:09

http://blog.kangkang.org/index.php/archives/49

lz看了这个没有...

意思就是

哦 对了 我原文上有个链接 那里解释的是和inode有关 蛮有道理的可以看看哦

[查看全文]
fair_jm
看了这个没有
展开Biu

nongeek 发表于 2012-8-29 22:09

http://blog.kangkang.org/index.php/archives/49

lz看了这个没有...

意思就是

漏洞?

貌似unix也是这样的 我不相信内核更新速度比win快的linux连这个也修补不好~~

对于底层实在不懂呢 反正初印象就这样好了 里面只说了cp吗 不是太懂 但是用 rm也是可以删除的~~

[查看全文]
nongeek
看了这个没有
展开Biu

http://blog.kangkang.org/index.php/archives/49

lz看了这个没有...

意思就是

主程序->直接使用kernel内部的do_mmap,所以加上了MAP_DENYWRITE没有问题

动态库->是调用的mmap并加上MAP_DENYWRITE,而mmap现在已经忽略了MAP_DENYWRITE 参数

所以实际上这还是linux上的一个漏洞?

[查看全文]