Limits on the Number of Open Files (81577)
The information in this article applies to:
- Microsoft Windows Software Development Kit (SDK) 3.0
- Microsoft Windows Software Development Kit (SDK) 3.1
This article was previously published under Q81577 SUMMARY
Because an application developed for the Windows graphical environment
runs only within the MS-DOS environment, the number of files that the
application can open is subject to two distinct limits imposed by
MS-DOS. This article discusses these limits.
MORE INFORMATION
The first limit on the number of open files is imposed by a table of
SFT data structures (System File Tables) within MS-DOS. The initial
number of SFTs is specified in the FILES= line of the CONFIG.SYS file.
MS-DOS version 5.0 does not provide a function to change the number of
SFTs in the table. However, some applications, including Windows,
contain the information necessary to change the size of the table.
The SFT table is global, that is, it is shared by all applications or
tasks that are active in the system. (Each task is represented by a
PSP or program segment prefix.) The exception to the global nature of
the SFT table, and the associated limit on the number of open files,
in introduced by Windows. Different groupings of applications, called
virtual machines (or VMs), have a "per VM" address space. This allows
a virtual machine to have a local portion of the SFT table, which
exists only in that VM. Because all graphical applications in the
Windows environment run in a single VM, only the MS-DOS (not
graphical) applications run in separate VMs.
MS-DOS does not support more than 255 SFTs. Therefore, it does not
support more than 255 open files at any time in any specific VM. The
SHARE utility, which extends MS-DOS core functionality, does not
support the ability to increase the size of the SFT table on a "per
VM" basis under Windows, because SHARE must, at any time, in any VM,
be able to enumerate all open SFTs in the entire system.
The second limit on the number of open files involves a "per
application" table, called the JFN table, which is stored in each
task's PSP. By default, the JFN in the PSP has room for 20 entries,
which limits each application to 20 open files. An application running
on MS-DOS version 3.3 and subsequent versions can change the size of
the JFN by calling MS-DOS INT 21h function 67h. This call allocates a
new JFN table and modifies values in the PSP to indicate the larger
size of the JFN table. This allows the application corresponding to a
particular PSP to open more than 20 files, provided that the global
SFT table, shared by all applications, has available SFTs.
The two limits work together as follows. First, to open a file, the
application must have a place available in its JFN table. Second,
MS-DOS must have an available SFT in its internal SFT table. Note that
if either of these requirements is not met, the OPEN (or CREATE) INT
21h call will fail with error 4.
Modification Type: | Major | Last Reviewed: | 10/30/2003 |
---|
Keywords: | kb16bitonly KB81577 |
---|
|