On typical computing systems, devices like printers, disks, etc. are being presented to users as if they were files. Such devices can be modeled using boxes too. Input/output can be done by using such ``special boxes'' as a source/target of a copy (or share) operation.
Random-access devices (e.g. disks) are modeled with boxes where select can be used to access resource units provided by the device (e.g. blocks). Sequential devices deserve a more detailed description. Considering the keyboard as an example, it can be modeled by a special box of type keyboard (a ``key-box'', for short). Inner boxes selected from the key-box represent input data coming from the keyboard. A given application can get input from the keyboard by selecting an inner box (with the desired number of characters) within the key-box. Once the inner box has been selected, it can be the source of successive copy operations targeted to any application's box. The inner box represents the next piece of data coming from the external device.
Note that inner boxes selected from special boxes representing input devices are more expressive than simple input buffers being used in our computing systems. (E.g. applications which want to get a line at a time from the keyboard can select a ``text-line-box'' from the key-box; those preferring a single key-stroke can select a ``char-box'' instead; etc.) Should no data be available from the external device, the inner box being used would block any copy operation until enough data is available.