【问题标题】:sbcl determine if symbolic linksbcl 判断是否符号链接
【发布时间】:2015-10-03 20:37:15
【问题描述】:

如何测试路径名是否是 sbcl 中的符号链接?

CL-USER> (apropos "syml" )
:CLASSIFY-SYMLINKS (bound)
:RESOLVE-SYMLINKS (bound)
:SYMLINK (bound)
SB-IMPL::CLASSIFY-SYMLINKS
SB-IMPL::RESOLVE-PROBLEMATIC-SYMLINK
SB-IMPL::RESOLVE-SYMLINKS
SB-POSIX:SYMLINK (fbound)
UIOP/FILESYSTEM:*RESOLVE-SYMLINKS* (bound)
UIOP/FILESYSTEM:RESOLVE-SYMLINKS (fbound)
UIOP/FILESYSTEM:RESOLVE-SYMLINKS* (fbound)
UTIL::CLASSIFY-SYMLINKS
UTIL::SYMLINK
; No value

这些似乎都没有用。分类符号链接似乎是一个关键字。

【问题讨论】:

    标签: common-lisp symlink sbcl


    【解决方案1】:

    TL;DR

    (defun symlinkp (pathname)
      (sb-posix:s-islnk (sb-posix:stat-mode (sb-posix:lstat pathname))))
    

    要回答首先要问的问题,如何确定某物(我认为是文件描述符)是否是 posix 中的符号链接。 man 2 stat 来救援。从手册页

    • lstat() 与 stat() 相同,除了如果 path 是非符号链接,则链接本身是 stat-ed,而不是它所引用的文件。

    • 定义了以下 POSIX 宏以使用 st_mode 字段检查文件类型:

    • S_ISLNK(m) 符号链接? (不在 POSIX.1-1996 中。)

    【讨论】:

      【解决方案2】:

      osicat具有file-kind功能,可以检测符号链接:

      (ql:quickload "osicat")
      
      (equalp :symbolic-link (osicat:file-kind "/some/path"))
      

      更新:如果您使用"/some/path/",此功能有问题并且不起作用。 (注意尾部的斜线。)

      【讨论】:

        猜你喜欢
        • 2013-02-12
        • 2019-01-24
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        相关资源
        最近更新 更多