Before doing any I/O operations to a file, you must first open the file using the mmioOpen function. The mmioOpen function returns a file handle which you use to identify the open file when calling other file I/O functions. The mmioOpen function has the following syntax:
HMMIO mmioOpen(szFileName, lpmmioinfo, dwFlags)
The szFileName parameter points to a null-terminated string containing the pathname of the file to open.
The lpmmioinfo parameter is a far pointer to an MMIOINFO structure containing additional parameters. For basic file I/O services, this parameter should be NULL.
The dwFlags parameter specifies options for opening the file. The most commonly used flags for basic file I/O are MMIO_READ, MMIO_WRITE, and MMIO_CREATE.
The return value is a file handle of type HMMIO. Use this file handle to identify the open file when calling other file I/O functions. If the file cannot be opened, the return value is NULL.
Warning:
An HMMIO file handle is not a MS-DOS file handle. Do not use HMMIO file handles with MS-DOS, Windows, or C run-time file I/O functions.
There are options you can use with the mmioOpen function for operations beyond basic file I/O. By specifying an MMIOINFO structure with the lpmmioinfo param-eter, you can open memory files, specify a custom I/O procedure, or supply a buffer for buffered I/O. These topics are discussed later in this chapter. First, this chapter discusses the most basic use of mmioOpen—opening files for basic unbuffered file I/O.
Summary: Opening a File
To open a file for basic I/O operations, set the lpmmioinfo parameter of mmioOpen to NULL. For example, the following code fragment opens a file named “C:\SAMPLES\SAMPLE1.TXT” for reading, and checks the return value for errors:
HMMIO hFile;
.
.
.
if ((hFile = mmioOpen("C:\\SAMPLES\\SAMPLE1.TXT", NULL, MMIO_READ)) != NULL)
/* File opened successfully */
else
/* File cannot be opened */
When you open a file, you must specify whether you are opening the file for reading, writing, or both reading and writing. In addition, you can specify other options, such as to create or delete a new file. Use the dwFlags parameter of mmioOpen to specify options for opening a file.
Summary: Basic Options
The following table lists the basic options for opening a file using mmioOpen:
Flag | Description |
MMIO_READ | Opens a file for reading only. |
MMIO_WRITE | Opens a file for writing only. |
MMIO_READWRITE | Opens a file for reading and writing. |
MMIO_CREATE | Creates a new file (if the file already exists, it truncates it to zero length). |
MMIO_DELETE | Deletes a file. |
MMIO_ALLOCBUF | Opens a file for buffered I/O. |
The MMIO_READ, MMIO_WRITE, and MMIO_READWRITE flags are read/write privilege flags. These flags are mutually exclusive—specify only one when opening a file. If you don't specify one of these flags, mmioOpen opens the file for reading only.
The MMIO_CREATE and MMIO_DELETE flags are also mutually exclusive. You can specify one of the read/write privilege flags with the MMIO_CREATE flag. You can't specify any additional flags with the MMIO_DELETE flag.
See “Performing Buffered File I/O,” later in this chapter, for information on using the MMIO_ALLOCBUF flag.
Summary: Sharing Options
In addition to the basic options for opening a file, there are sharing options you can use for opening MS-DOS files so they can be opened and accessed by more than one process. The following table lists the sharing options for opening a file using mmioOpen.
Flag | Description |
MMIO_COMPAT | Opens a file in compatibility mode. |
MMIO_EXCLUSIVE | Opens a file in exclusive mode. |
MMIO_DENYWRITE | Opens a file and denies other processes write access to the file. |
MMIO_DENYREAD | Opens a file and denies other processes read access to the file. |
MMIO_DENYNONE | Opens a file without denying other processes read or write access to the file. |
The sharing options are rarely used by applications, and are provided only because they are available through MS-DOS. They are not available for memory files or for files opened using custom I/O procedures. For more information on sharing options, see the Microsoft MS-DOS Programmer's Reference or the Microsoft MS-DOS Encyclopedia.
Note:
MS-DOS sharing options only work if the MS-DOS share command is used before the file is opened.