GNU poke provides support for opening and operating on several kinds of IO spaces: files, memory buffers, process memory, etc. An IO space can be opened for reading, for writing or both, and they all can be accessed randomly, i.e. to read or write some data from/to a particular offset in the IO space.
Writing a filter would involve to peek data from the standard input and then poke the data (maybe transformed) to the standard output or the standard error output. However, we know that these devices are not random oriented devices that can be accessed at any offset, but rather stream-like devices whose special characteristics are:
Given the above characteristics of streams like the standard input and output, it is clear we cannot use the File IO streams on them. It is also not clear how could we perform a map operation on a stream device: in poke these operations always require an explicit offset.
GNU poke solves this by providing three special IO spaces that the user can open using the following handlers:
<stdin>
Read-only stream IOS that is connected to the standard input of the poke process.
<stdout>
Write-only stream IOS that is connected to the standard output of the poke process.
<stderr>
Write-only stream IOS that is connected to the standard error of the poke process.
Opening these IO spaces is done exactly like with any other IO space. Example:
var stdin = open ("<stdin>");