Regardless of the specific characteristics of the particular tape transport mechanism (tape drive),
UNIX tape I/O has two interfaces: “block” and “raw”. I/O through the block interface of a tape device is similar to I/O through the block special device for a disk driver: the individual
read(2) and
write(2) calls can be done in any amount of bytes, but all data is buffered through the system buffer cache, and I/O to the device is done in 1024 byte sized blocks. This limitation is sufficiently restrictive that the block interface to tape devices is rarely used.
The “raw” interface differs in that all I/O can be done in arbitrary sized blocks, within the limitations for the specific device and device driver, and all I/O is synchronous. This is the most flexible interface, but since there is very little that is handled automatically by the kernel, user programs must implement specific magnetic tape handling routines, which puts the onus of correctness on the application programmer.