3.3 创建与删除文件硬链接
链接是对文件的引用,硬链接只能引用同一系统中的文件。当移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。
文件系统模块提供了fs.link()、fs.unlink()、fs.linkSync()、fs.unlinkSync()四个方法来完成创建与删除文件硬链接的操作。其中,fs.linkSync()与fs.unlinkSync()是同步方式的一组方法,而fs.link()与fs.unlink()是异步方式的一组方法。
下面介绍以同步方式创建文件硬链接的代码实例。
【代码3-3】(详见源代码目录ch03-node-fs-link-sync.js文件)
【代码分析】
• 为了测试创建与删除文件硬链接的操作,先在代码文件目录中新建一个“txtlink”子目录,并新建一个名称为“linkSync.txt”的文本文件;同时,通过fs.linkSync()方法创建的硬链接“linkSyncNew.txt”也将存放在该目录中。
• 第25行和第26行代码声明了两个变量(srcpath和dstpath),分别定义为原始文本文件“linkSync.txt”和将要创建硬链接“linkSyncNew.txt”的路径。
• 第31行代码通过fs.linkSync()方法创建了原始文本文件“linkSync.txt”的硬链接“linkSyncNew.txt”。
• 第42~70行代码通过spawn()方法查看了“txtlink”子目录的文件信息。关于这段代码中所使用到的功能模块会在后续章节中详细介绍,读者可先忽略。
在控制台中运行该Node程序,具体的输出内容如图3.3所示。
如图3.3所示,第16行代码输出的原始文件“linkSync.txt”的内容(文本内容为fs.linkSync())与第37行代码输出的硬链接文件“linkSyncNew.txt”的内容是完全一致的,这说明fs.linkSync()方法执行的创建硬链接文件的操作成功完成了。
接下来介绍以同步方式删除文件硬链接的方法。其实,【代码3-3】中所注销的第39~41行代码就是以同步方式删除文件硬链接的操作,只要撤销注销这3行代码就可以了。
图3.3 创建文件硬链接的方法(同步版本)
【代码3-4】(详见源代码目录ch03-node-fs-link-sync.js文件)
39 console.log('fs.unlinkSync() Start...'); 40 fs.unlinkSync(dstpath); 41 console.log('fs.unlinkSync() Done.');
【代码分析】
• 第40行代码通过fs.unlinkSync()方法执行了删除硬链接文件的操作。
再次在控制台中运行该Node程序,具体的输出内容如图3.4所示。
图3.4 删除文件硬链接的方法(同步版本)
如图3.4所示,第40行代码调用fs.unlinkSync()方法(同步方式)成功执行了删除文件硬链接的操作。
另外,结合本代码实例的运行结果来看,使用fs.linkSync()方法(fs.link()方法相同)创建的文件硬链接实际上是创建原始文件的新副本,而不是文件的符号链接。关于创建文件符号链接的方法,将在下一节进行介绍。