我如何从 Gforth 的网站读取原始代码?
How do I read raw code from a website in Gforth?
我想要一个字
read-site ( add n buff max -- n flag )
其中 'add n' 是站点名称缓冲区,'buff max' 是 ASCII 文本应读取到的缓冲区,'n' 是读取的字节数 flag
如果操作成功则为真。
在 Linux、Android 或 Windows 中的 Gforth 中这可能吗?
只是一个方法列表
最简单正确的方法应该是在 Forth(如果有的话)中使用 HTTP 客户端库(或绑定)。 Gforth 存储库中似乎存在某种此类库 — 请参阅 netlib/httpclient.fs。显然它不适用于 HTTPS。
下一个方法是使用合适的外部共享库,例如libcurl。它是支持很多协议的著名工具(绑定和一些使用示例也可以在 SP-Forth 中找到)。
下一个方法是使用系统调用并生成子进程(就资源使用而言不是那么有效的方法)。 Gforth 对此有 system
个词。使用示例:
S" curl http://example.com/" system
网页 HTML 代码将打印到标准输出。不幸的是,使用 outfile-execute
的重定向在这种情况下不起作用(它看起来像 system
词的不完整或薄弱的实现)。
所以,应该使用一个临时文件:
S" curl --silent http://example.com/ > tmp" system
之后可以将文件内容读入给定的缓冲区。
概念性实现如下:
: read-url ( d-buffer d-txt-url -- d-txt-webpage )
s" curl --silent {} > tmp" interpolate system
over >r \ keep buf addr
s" tmp" open-file throw dup >r read-file throw
r> close-file throw
r> swap
;
其中 interpolate ( i*x d-txt1 -- d-txt2 )
扩展了给定的模板。
我想要一个字
read-site ( add n buff max -- n flag )
其中 'add n' 是站点名称缓冲区,'buff max' 是 ASCII 文本应读取到的缓冲区,'n' 是读取的字节数 flag
如果操作成功则为真。
在 Linux、Android 或 Windows 中的 Gforth 中这可能吗?
只是一个方法列表
最简单正确的方法应该是在 Forth(如果有的话)中使用 HTTP 客户端库(或绑定)。 Gforth 存储库中似乎存在某种此类库 — 请参阅 netlib/httpclient.fs。显然它不适用于 HTTPS。
下一个方法是使用合适的外部共享库,例如libcurl。它是支持很多协议的著名工具(绑定和一些使用示例也可以在 SP-Forth 中找到)。
下一个方法是使用系统调用并生成子进程(就资源使用而言不是那么有效的方法)。 Gforth 对此有 system
个词。使用示例:
S" curl http://example.com/" system
网页 HTML 代码将打印到标准输出。不幸的是,使用 outfile-execute
的重定向在这种情况下不起作用(它看起来像 system
词的不完整或薄弱的实现)。
所以,应该使用一个临时文件:
S" curl --silent http://example.com/ > tmp" system
之后可以将文件内容读入给定的缓冲区。
概念性实现如下:
: read-url ( d-buffer d-txt-url -- d-txt-webpage )
s" curl --silent {} > tmp" interpolate system
over >r \ keep buf addr
s" tmp" open-file throw dup >r read-file throw
r> close-file throw
r> swap
;
其中 interpolate ( i*x d-txt1 -- d-txt2 )
扩展了给定的模板。