The C I/O functions make it possible to
access the host's operating system to perform I/O. The capability to perform I/O on the host
gives you more options when debugging and testing code.
The I/O functions are logically divided into
layers: high level, low level, and device-driver level.
With properly written device drivers, the
C-standard high-level I/O functions can be used to perform I/O on custom user-defined
devices. This provides an easy way to use the sophisticated buffering of the high-level I/O
functions on an arbitrary device.
Note: Debugger Required for Default HOST: For
the default HOST device to work, there must be a debugger to handle the C I/O requests; the
default HOST device cannot work by itself in an embedded system. To work in an embedded
system, you will need to provide an appropriate driver for your system.
Note: C I/O Mysteriously Fails: If there is
not enough space on the heap for a C I/O buffer, operations on the file will silently fail.
If a call to printf() mysteriously fails, this may be the reason. The heap needs to be at
least large enough to allocate a block of size BUFSIZ (defined in stdio.h) for every file on
which I/O is performed, including stdout, stdin, and stderr, plus allocations performed by
the user's code, plus allocation bookkeeping overhead. Alternately, declare a char array of
size BUFSIZ and pass it to setvbuf to avoid dynamic allocation. To set the heap size, use
the --heap_size option when linking
Section 12.4.
Note: Open Mysteriously Fails: The run-time
support limits the total number of open files to a small number relative to general-purpose
processors. If you attempt to open more files than the maximum, you may find that the open
will mysteriously fail. You can increase the number of open files by extracting the source
code from rts.src and editing the constants controlling the size of some of the C I/O data
structures. The macro _NFILE controls how many FILE (fopen) objects can be open at one time
(stdin, stdout, and stderr count against this total). (See also FOPEN_MAX.) The macro
_NSTREAM controls how many low-level file descriptors can be open at one time (the low-level
files underlying stdin, stdout, and stderr count against this total). The macro _NDEVICE
controls how many device drivers are installed at one time (the HOST device counts against
this total).