Common lisp 访问sbcl errno字符串

Common lisp 访问sbcl errno字符串,common-lisp,sbcl,Common Lisp,Sbcl,在sbcl中,我可以像在这里打开不存在的文件一样处理错误: (require "SB-POSIX") (let* (fd) (handler-case (setf fd (sb-posix:open "w" sb-posix:o-rdonly)) (sb-posix:syscall-error (c) (princ "error ") (princ (sb-posix:syscall-errno c)) (princ " d

在sbcl中,我可以像在这里打开不存在的文件一样处理错误:

(require "SB-POSIX")
(let* (fd)
   (handler-case
       (setf fd (sb-posix:open "w" sb-posix:o-rdonly))
     (sb-posix:syscall-error (c)
       (princ "error ")
       (princ (sb-posix:syscall-errno c))
       (princ " during ")
       (princ (sb-posix:syscall-name c))
       (terpri))))
error 2 during OPEN-WITHOUT-MODE
如果我没有捕捉到错误,结果的顶部如下所示:

 (require "SB-POSIX")
 (let* (fd)
   (setf fd (sb-posix:open "w" sb-posix:o-rdonly)))
Unhandled SB-POSIX:SYSCALL-ERROR:
  Error in SB-POSIX::OPEN-WITHOUT-MODE: No such file or directory (2)

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1001976AB3}>
(需要“SB-POSIX”)
(let*(fd)
(setf fd(sb posix:打开“w”sb posix:仅限o-RDO)))
未处理的SB-POSIX:SYSCALL-ERROR:
SB-POSIX::OPEN-WITHOUT-MODE中出错:没有这样的文件或目录(2)
回溯:#
看到“没有这样的文件或目录”了吗?有没有一种方法可以让我的代码访问该字符串,这样我的错误处理程序就可以说一些比“error 2”稍微不那么愚蠢的东西呢?

条件调用
SB-INT:STRERROR
,使用错误号来获取字符串。这反过来又只是一种获得错误代码描述的特定于平台的方法


如果您使用的是Emacs/Slime,并且有可用的SBCL源代码,您可以使用
M-。
跳转到函数/类/等的定义,这对于了解内部如何工作非常有用。

(sb int:strerror errno)
似乎是条件如何得到它的。@jkiiski:完美!如果你想让它成为一个正式的答案,我将投票表决并将其标记为首选解决方案。