Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lisp 写入文件时出错";是#的私人信息<;工艺工人()”;_Lisp_Common Lisp_Slime_Ccl - Fatal编程技术网

Lisp 写入文件时出错";是#的私人信息<;工艺工人()”;

Lisp 写入文件时出错";是#的私人信息<;工艺工人()”;,lisp,common-lisp,slime,ccl,Lisp,Common Lisp,Slime,Ccl,我只是从CL开始,我在WindowsXP64中使用CCL+Slime和EmacsV24。我遇到以下问题: 如果我在REPL中输入这三个表达式,就会得到预期的结果,即一个包含文本“Something”的文件: 但是,如果相同的代码在文本缓冲区中,并且我使用C-C-C逐个计算表达式,则在计算(write…)语句时会出现此错误: Stream #<BASIC-FILE-CHARACTER-OUTPUT-STREAM ("e:/test.txt"/2616 UTF-8) #x2180C0A06D&

我只是从CL开始,我在WindowsXP64中使用CCL+Slime和EmacsV24。我遇到以下问题:

如果我在REPL中输入这三个表达式,就会得到预期的结果,即一个包含文本“Something”的文件:

但是,如果相同的代码在文本缓冲区中,并且我使用C-C-C逐个计算表达式,则在计算(write…)语句时会出现此错误:

Stream #<BASIC-FILE-CHARACTER-OUTPUT-STREAM ("e:/test.txt"/2616 UTF-8) #x2180C0A06D> is private to #<PROCESS worker(46) [Reset] #x2180BB558D>
[Condition of type SIMPLE-ERROR]
Stream#是私有的#
[简单错误类型的条件]
原因可能是什么?谢谢你的帮助

编辑:

我在回溯中发现了这一点,因此错误似乎来自(CCL::CHECK-IOBLOCK-OWNER…),它表示所有者是“流程工作者(31)”:

0:(CCL::CHECK-IOBLOCK-OWNER(CCL::FILE-IOBLOCK:STREAM#:UNTYI-CHAR NIL:INBUF…)
当地人:
IOBLOCK=#S(CCL::FILE-IOBLOCK:STREAM#:UNTYI-CHAR NIL:INBUF…)
所有者=#
我执行了以下测试以查看文件流的所有者:

  • 我从REPL打开了两个不同的文件,file-out1和file-out2,当我试图用C-C C-C从测试缓冲区写入它们时,我得到一个错误,说所有者是“worker(12)”

  • 我用C-C-C从测试缓冲区打开了file-out1,当试图从测试缓冲区或REPL或其他任何地方写入时,我得到一个错误,说所有者是“worker(30)”

  • 我用C-C-C从测试缓冲区打开了file-out2,当试图从测试缓冲区或REPL或其他任何地方写入时,我得到一个错误,说所有者是“worker(31)”

  • 我用C-C-k一次运行了测试缓冲区(打开、写入和关闭文件),它工作了

结论:

REPL有一个工作进程ID,该ID不会更改,但每次从单独的缓冲区(C-C-C或C-C-k)发出的求值都会生成一个新的工作进程。有人能解释一下整个“员工流程”吗

编辑:


我在Linux中重新测试,得到了与Windows中相同的行为,为了避免混淆,我删除了关于Linux的部分。我从中得到了答案:CCL中(open…)的默认行为是将流的所有权授予第一次尝试对其进行I/O操作的进程。这可以用参数:sharing:lock覆盖。这在中有记录


我已经测试过了,现在它可以正常工作了。

Hmm,C-C-C与linux、emacs、slime&sbcl一起工作对我来说很奇怪。稍后我将在Windows7上试用。我已经使用win7、emacs、slime和sbcl进行了测试,并且在那里也可以使用。对不起,我不能在这里提供更多的帮助。谢谢,我会继续努力的。
Stream #<BASIC-FILE-CHARACTER-OUTPUT-STREAM ("e:/test.txt"/2616 UTF-8) #x2180C0A06D> is private to #<PROCESS worker(46) [Reset] #x2180BB558D>
[Condition of type SIMPLE-ERROR]
0: (CCL::CHECK-IOBLOCK-OWNER #S(CCL::FILE-IOBLOCK :STREAM #<BASIC-FILE-CHARACTER-OUTPUT-STREAM ("e:/apps/gcj/2008-0-A-large-practice.out"/1600 UTF-8) #x2180AA709D> :UNTYI-CHAR NIL :INBUF ...))
    Locals:
    IOBLOCK = #S(CCL::FILE-IOBLOCK :STREAM #<BASIC-FILE-CHARACTER-OUTPUT-STREAM ("e:/apps/gcj/2008-0-A-large-practice.out"/1600 UTF-8) #x2180AA709D> :UNTYI-CHAR NIL :INBUF ...)
    OWNER = #<PROCESS worker(31) [Reset] #x2180AA2B5D>