首页 > 解决方案 > osicat-posix:stat 冻结

问题描述

我对 Common Lisp 很陌生,在使用“osicat”系统中的功能时需要帮助。我想要完成的是获取文件的大小。为此,我想使用 osicat 系统的“stat”函数返回的结果。在尝试从我启动 sbcl 的同一目录中找到的文件中获取信息时,似乎该函数需要永远从文件中收集信息,或者它不执行任何操作并因未知原因挂起。我不太了解如何解决这个问题,我也不知道是什么导致了这个问题。

以下是在我遇到问题之前采取的一系列行动:

  1. 打开 Powershell。
  2. 执行cygwin
  3. 执行 sbcl
  4. (ql:quickload :osicat) (加载时没有任何抱怨)
  5. (包内:osicat-posix)
  6. (osicat-posix:stat "env.db")

执行完最后一条命令后,就好像 repl 循环挂起一样。我尝试在互联网上搜索任何关于为什么会发生这种情况的线索或答案,但只找到给出相同说明的教程,这让我很难过。任何见解、线索、提示或帮助将不胜感激。

标签: lispcommon-lispread-eval-print-loopsbcl

解决方案


你的动作顺序没有错,你应该期待你想要的结果。这是我在 SLIME 中的输出:

CL-USER> (osicat-posix:stat "/etc/passwd")
#<OSICAT-POSIX:STAT {1039159BB3}>
CL-USER> (describe (osicat-posix:stat "/etc/passwd"))
#<OSICAT-POSIX:STAT {103916B4F3}>
  [standard-object]

Slots with :INSTANCE allocation:
  DEV                            = 64769
  INO                            = 25166054
  MODE                           = 33188
  NLINK                          = 1
  UID                            = 0
  GID                            = 0
  RDEV                           = 0
  SIZE                           = 2324
  BLKSIZE                        = 4096
  BLOCKS                         = 8
  ATIME                          = 1576246741
  MTIME                          = 1575707407
  CTIME                          = 1575707407

也许,您的问题与cygwin交互有关。您可能会通过sbclstrace.


推荐阅读