在Linux中使用RandomAccessFile将数据写入磁盘的位置在哪里?

问题描述 投票:-1回答:1

我遇到了一个使我困惑的问题一段时间。在Linux中,我以root用户身份登录。然后,我编写了一个Java程序,该程序首先使用RandomAccessFile将数据写入磁盘,然后删除了该文件。

但是该程序继续运行,没有引发任何异常!但是,即使在Linux PageCache中,我也找不到书面数据!以下是代码段:

RandomAccessFile file =  new RandomAccessFile("/opt/temp.log", "rw");
     byte[] content = "Hello!!!\n".getBytes();
     for (int i = 0; i < 2; i++) {
         file.write(content, 0, content.length);
         Thread.sleep(3000);//just for lefting time to delete the "temp.log" file! 
     }

但是如果我将file.write()方法更改为file.writeBytes(),它将重新生成新文件并将数据写入该文件。以下是代码段:

RandomAccessFile file =  new RandomAccessFile("/opt/temp.log", "rw");          
     for (int i = 0; i < 2; i++) {                                                                               
         file.writeBytes("Hello!!!\n");                                             
         Thread.sleep(3000);//just for lefting time to delete the "temp.log" file!                                                    
     }

发生了什么事? RandomAccessFile中有错误吗?

java linux java-io randomaccessfile
1个回答
0
投票

这在POSIX / Unix系统和设计受Linux的POSIX / Unix严重影响的系统中是预期的。 Unix系统中的文件只要有引用该文件的内容,就将保持可读性和可写性。文件在文件系统中可以具有多个名称(硬链接),但是进程也可以具有打开的文件句柄或文件上的mmap。只要文件中的至少一个仍处于活动状态,文件就不会真正被系统释放。

是,这意味着从文件系统中删除文件后,进程仍然可以继续读写文件。出于所有目的和目的,没有名称的文件仍然是功能完善的文件,并且仍会占用磁盘空间。

© www.soinside.com 2019 - 2024. All rights reserved.