写入"第四盘"

Eva*_*oll 0 io forth read-eval-print-loop gforth

你有一个单词USE,它将创建一个文件.

  • USE xxx ( -- )

    将OS文本文件xxx指定为"Forth disk".

但是,目前尚不清楚如何在交互式会话中写入该FORTH磁盘.有动词如FLUSH和,UPDATE但他们都没有看到做任何事情.我正在使用gforth.我在会话中创建单词并使用它们.我不明白FORTH磁盘在这种情况下是如何工作的.它听起来像R save.image(),除了我无法得到任何东西来保存.你能提供一系列命令,导致某些东西被写入参数USE吗?

Chr*_*odd 5

FORTH最初的设计是基于具有原始持久存储系统("磁盘")和NO文件系统的低级系统的概念 - 所以没有文件或文件夹的概念或类似的东西.相反,您可以按块编号在磁盘上读取和写入固定大小的块.

现代FORTH系统(如gforth)支持文件系统,但ALSO仍然支持通过块号访问的低级原始"磁盘".由于gforth通常在具有文件系统且没有低级别磁盘访问(没有超级用户权限)的操作系统上运行,因此要使用低级磁盘块字,需要提供一个文件用作原始磁盘块的底层存储- 这就是这个USE词的作用.


如果你想了解如何使用 FORTH中的低级块I/O字,你需要阅读关于它的第四本书,但基本上,你用来BLOCK将块读入缓冲区,UPDATE将缓冲区标记为已修改,并将FLUSH修改后的缓冲区刷新到磁盘.从ANSI规范中,您会发现:

7.6.1.0800 BLOCK(u-a-addr)
a-addr是分配给大容量存储块u的块缓冲区的第一个字符的地址.
如果u不是可用的块编号,则存在模糊条件.
如果块u已经在块缓冲区中,则a-addr是该块缓冲区的地址.
如果块u尚未在内存中并且存在未分配的块缓冲区,则将块u从大容量存储器传输到未分配的块缓冲区.a-addr是该块缓冲区的地址.
如果块u尚未在内存中且没有未分配的块缓冲区,则取消分配块缓冲区.
如果该缓冲区中的块已被UPDATEd,则将块传输到大容量存储器并将块u从大容量存储器传输到该缓冲区.a-addr是该块缓冲区的地址.
在操作结束时,a-addr指向的块缓冲区是当前块缓冲区并分配给u.

7.6.1.2400 UPDATE( - )
将当前块缓冲区标记为已修改.如果没有当前块缓冲区,则存在模糊条件.
UPDATE不会立即导致I/O.
参见:7.6.1.0800 BLOCK,7.6.1.0820 BUFFER,7.6.1.1559 FLUSH,7.6.1.2180 SAVE-BUFFERS.