Using Low-Level I/O Functions

IBM C and C++ Compilers supports both stream and low-level I/O. The primary difference between the two types of I/O is that low-level I/O leaves the responsibility of buffering and formatting up to you.

In general, you should not mix input or output from low-level I/O with that from stream I/O. The only way to communicate between stream I/O and low-level I/O is by using the fdopen or fileno functions.

The low-level I/O functions include:

access dup2 isatty stat
chmod __eof lseek _tell
_chsize fdopen open umask
close _filelength read write
creat fileno _setmode  
dup fstat _sopen  

When you use the low-level I/O functions, you should be aware of the following:

  1. A handle is a value that identifies a file. It is created by the system and used by low-level I/O functions.

    For OS/2, the handle returned by low-level I/O functions like open (called the C handle) is the same as that returned by DosOpen (called the API handle). As a result, you can get a file handle using the low-level I/O functions, and then use it with system APIs. Consequently, you can pass handles between library environments without restriction. If you acquire a handle other than by using the IBM C and C++ Compilers library functions open, creat, _sopen, or fileno, you must run _setmode for that handle before you use it with other IBM C and C++ Compilers library functions.

    Portability Note: If you will be compiling your programs with other compilers, do not write code that depends on the file handles being the same.

    For Windows, the runtime maps the file handle so that the C handle and API handle are different. You can map from C handle to API handle using _get_osfhandle, and you can map from API handle to C handle using _open_osfhandle.
  2. The default open-sharing mode is SH_DENYWR. Use _sopen to obtain other sharing modes.
  3. Text mode deletes '\r' characters on input and changes '\n' to '\r\n' on output.
  4. In a multithread environment, you must ensure that two threads do not attempt to perform low-level I/O operations on the same file at the same time. You must make sure that one I/O process is completed before another begins.
  5. If the file mode is text, the low-level I/O functions treat the character 'x1a' in the following ways:


Alphabetical Listing of IBM C and C++ Compilers Functions and Macros