zoukankan      html  css  js  c++  java
  • lua file system lfs 软链接 硬链接

    • 对lua file system(lfs)。
      lfs.link (old, new[, symlink])
      若old是symlink,则不论方法(函数)的第三个参数是什么(true/false/nil),目标(new)总是symlink。
      成功返回true;失败返回nil+error message(make_link CreateHardLink() failedmake_link CreateSymbolicLink() failed
      (不论建立软链接硬链接)无需?(貌似测试中一台电脑无需,一台需)管理员权限。
    • ln.exe中建立软链接需管理员权限。
    Please note that symbolic links can only be successfully created from an administrative command prompt. ln.exe will fail on symbolic links from a normal command prompt!
    •  mklink需管理员权限,否则报错你没有足够的权限执行此操作。
    • 其他,当软链接的目标失效时,io.open软链接返回nil,尽管资源管理器中能看到软链接文件(可以打开文件属性,不可打开文件)。
    •  subst 建立的虚拟(virtual volume)(目录)下的硬链接的filepath。
      对lfs lfs.symlinkattributes(filepath).mode 为'file',但其target为实际目录
      对HardlinkShellExt,文件属性\连接属性下,连接类型:硬链接硬连接的引用位置:实际目录路径(无当前虚拟卷路径)。
      为此硬链接建立的软连接在HardlinkShellExt中查看,指向此(基于虚拟卷的)硬链接(而非指向虚拟目录);在lfs中target为实际目录
    • 结论lfs lfs.dll lua file system symlink symbolic link hardlink hard link ln.exe direct/previous/final source/destination virtual volume subst directory source/target file symlinkattributes attributes  
    • 测试(lfsln
      local lfs=require'lfs'
      lfs.chdir[[G:\]]
      local E={close=function()end}
      assert(not (io.open'O.txt' or E):close() and not (io.open'S.txt' or E):close() and not (io.open'S2.txt' or E):close() and not (io.open'S2b.txt' or E):close() and not (io.open'H.txt' or E):close() and not (io.open'Hb.txt' or E):close() and not (io.open'H2.txt' or E):close() and not (io.open'H2b.txt' or E):close())
      ----
      io.open('O.txt','w'):close()
      lfs.link('O.txt','S.txt',true)
      --hardlink
      lfs.link('S.txt','H.txt')
      os.execute('ln >nul 2>nul S.txt Hb.txt')
      --symlink level 2
      lfs.link('S.txt','S2.txt',true)
      os.execute('ln >nul 2>nul --symbolic S.txt S2b.txt')
      --hardlink level 2
      lfs.link('S2.txt','H2.txt')
      os.execute('ln >nul 2>nul S2.txt H2b.txt')
      ----
      assert(lfs.symlinkattributes'H.txt'.mode=='link')
      assert(lfs.symlinkattributes'Hb.txt'.mode=='link')
      assert(lfs.symlinkattributes'S.txt'.mode=='link')
      assert(lfs.symlinkattributes'S2.txt'.mode=='link')
      assert(lfs.symlinkattributes'S2b.txt'.mode=='link')
      assert(lfs.symlinkattributes'H2.txt'.mode=='link')
      assert(lfs.symlinkattributes'H2b.txt'.mode=='link')
      ----
      local function ln_target(fn)--show the target of a symbolic link
          local r=io.popen('ln --symbolic '..fn)
          return string.match(r:read'a','%-> (.+)\n')
      end
      assert(ln_target'H.txt'=='O.txt')
      assert(ln_target'Hb.txt'=='O.txt')
      assert(ln_target'S.txt'=='O.txt')
      assert(ln_target'S2.txt'=='S.txt')
      assert(ln_target'S2b.txt'=='S.txt')
      assert(ln_target'H2.txt'=='S.txt')
      assert(ln_target'H2b.txt'=='S.txt')
      ----
      local t=[[G:\O.txt]]
      assert(lfs.symlinkattributes'H.txt'.target==t)
      assert(lfs.symlinkattributes'Hb.txt'.target==t)
      assert(lfs.symlinkattributes'S.txt'.target==t)
      assert(lfs.symlinkattributes'S2.txt'.target==t)
      assert(lfs.symlinkattributes'S2b.txt'.target==t)
      assert(lfs.symlinkattributes'H2.txt'.target==t)
      assert(lfs.symlinkattributes'H2b.txt'.target==t)
      os.execute('del O.txt S.txt S2.txt S2b.txt H.txt Hb.txt H2.txt H2b.txt')
      print'test done.'
  • 相关阅读:
    Linux上面执行 Windows 命令(比如 重启服务)的简单方法
    Linux 通过cksum 来判断文件是否是相同
    Linux 根据端口快速停止服务并启动的办法
    Delphi控件开发浅入深出(三)
    Delphi 资源文件( .res)
    C++中模块(Dll)对外暴露接口的方式
    delphi Align属性
    cport串口控件的应用
    两款工控控件对比评测:Iocomp和ProEssentials
    Android 将ARGB图片转换为灰度图
  • 原文地址:https://www.cnblogs.com/RobertL/p/14383895.html
Copyright © 2011-2022 走看看