
3.5 读取文件符号链接
文件系统模块提供了fs.readlink()和fs.readlinkSync()两个方法来完成读取文件符号链接的方法的操作。下面介绍一个通过fs.readlinkSync()方法以同步方式读取文件符号链接的代码实例。
【代码3-6】(详见源代码目录ch03-node-fs-readlink-sync.js文件)

【代码分析】
• 本例程为了测试读取文件符号链接的操作,借用了3.4节中所使用的两个文件(原始文件“symlinkSync.txt”及其符号链接文件“symlinkSyncNew.txt”)。
• 第08行代码定义了一个符号链接文件“symlinkSyncNew.txt”的路径。
• 第13行代码通过调用fs.readlinkSync()方法(同步方式)执行了读取符号链接文件“symlinkSyncNew.txt”的操作,返回值保存在变量(linkString)中。

图3.6 读取文件符号链接的方法(1)
在控制台中运行该Node程序,具体的输出内容如图3.6所示。
如图3.6中的标识所示,第14行代码输出了变量(linkString)的值为“symlinkSync.txt”,说明“symlinkSyncNew.txt”是一个文件符号链接,其所链接的对象就是原始文件symlinkSync.txt。
上面介绍了通过fs.readlinkSync()方法读取文件符号链接的方法。如果通过该方法读取原始文件,那么会得到什么结果呢?下面将【代码3-6】略作修改,尝试用fs.readlinkSync()方法读取原始文件。
【代码3-7】(详见源代码目录ch03-node-fs-readlink-sync.js文件)

【代码分析】
• 第08行代码定义了一个原始文件“symlinkSync.txt”的路径。
• 第13行代码通过调用fs.readlinkSync()方法(同步方式)执行了读取原始文件“symlinkSync.txt”的操作,返回值保存在变量(srcString)中。
在控制台中运行该Node程序,具体的输出内容如图3.7所示。

图3.7 读取文件符号链接的方法(2)
如图3.7中的箭头所示,第13行代码中尝试通过fs.readlinkSync()方法读取原始文件“symlinkSync.txt”的操作抛出了错误,这说明fs.readlinkSync()方法只对文件符号链接有效。