You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Interlisp Medley文本流写入文件失败求助:无报错但文件无内容

Interlisp Medley 文件写入流问题排查与解答

问题场景

尝试在Interlisp Medley中将文本流写入文件,查阅网络及书籍资料后仍未找到可行的I/O流文件操作方法。参考@ignis volens的解答后进行了两次尝试,但均未达到预期效果,具体情况如下:

第一次尝试代码及问题

使用以下代码未报错,但目标文件无内容:

(SETQ S (OPENSTREAM 'output.TEDIT 'OUTPUT))
> <OUTPUT stream ...>
(PRIN1 'lalala S)
> lalala      
(GETFILEINFO 'output.TEDIT 'PROTECTION)
> 33188  
  • 问题:代码执行后output.TEDIT文件中没有写入预期的lalala文本
  • 疑问:GETFILEINFO返回的保护码33188是什么含义?

第二次尝试代码及错误

改用OPENFILE函数出现报错:

(SETQ N (OPENFILE 'n.TEDIT 'OUTPUT))
> {DSK}...
(PRIN1 'lalala N)
> LITATOM 'streams' no longer supported
{DSK}...

问题解答

1. 文件无内容的解决方法

Interlisp Medley的输出流默认采用缓冲模式,PRIN1写入的内容会暂存于缓冲区,不会立即写入磁盘。必须显式执行刷新或关闭流的操作,才能让内容落地到文件。修改后的代码示例:

(SETQ S (OPENSTREAM 'output.TEDIT 'OUTPUT))
(PRIN1 'lalala S)
(FLUSHSTREAM S) ; 强制将缓冲区内容刷入文件
(CLOSESTREAM S) ; 关闭流时会自动完成缓冲区刷新

2. 保护码33188的含义

Interlisp的文件保护码是十进制表示的八进制权限值,33188转换为八进制是077774,对应权限规则:

  • 前三位777表示所有者、组、其他用户均拥有读、写、执行权限
  • 最后一位4(八进制)对应Interlisp的NODELETE属性,即该文件不可被删除

3. OPENFILE报错的原因

OPENFILE是Interlisp旧版本的函数,在Medley版本中已被OPENSTREAM替代,不再支持流操作。所有文件流操作必须使用OPENSTREAM函数,避免调用过时的OPENFILE。

内容的提问来源于stack exchange,提问作者QianruZhou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:03:13