Redirecting a TSR May Leave File Handle Open (84718)
The information in this article applies to:
- Microsoft MS-DOS operating system 3.1
- Microsoft MS-DOS operating system 3.2
- Microsoft MS-DOS operating system 3.21
- Microsoft MS-DOS operating system 3.3
- Microsoft MS-DOS operating system 3.3a
- Microsoft MS-DOS operating system 4.0
- Microsoft MS-DOS operating system 4.01
- Microsoft MS-DOS operating system 5.0
- Microsoft MS-DOS operating system 5.0a
- Microsoft MS-DOS operating system 6.0
- Microsoft MS-DOS operating system 6.2
- Microsoft MS-DOS operating system 6.21
- Microsoft MS-DOS operating system 6.22
This article was previously published under Q84718 SUMMARY
If you run a terminate-and-stay-resident (TSR) program and redirect
the output to a file using a command similar to
the file handle of the redirected file is not closed automatically by
MS-DOS. In this case, you can run out of file handles if the TSR
reinstalls itself each time it is invoked.
MORE INFORMATION
When a program is executed, it inherits all the files its "parent"
(usually COMMAND.COM) had open. At a minimum, this usually includes
the file handles for the standard devices: STDIN, STDOUT, STDAUX,
STDERR, and STDPRN.
If the input or output of a program is redirected, MS-DOS opens the
specified file(s) and redirects STDIN or STDOUT to the file specified
before executing the program. The program will input and output
information as normal, but anything read from STDIN or written to
STDOUT will actually go to the specified file instead. The program is
not aware of this redirection (and if the program does not use STDIN
or STDOUT, the redirection will appear "fail").
When the program exits, MS-DOS automatically closes the handles that
were opened due to redirection. TSR programs stay resident instead of
exiting, thus the redirected files are not closed automatically by
MS-DOS. If MS-DOS closed file handles when a program terminates but
stays resident, problems could occur if the TSR tried to use the
file(s) at a later time.
TSR programs can avoid this problem by closing file handle(s) when the
TSR program is finished using them. For example, if the program has
sent all its startup information to STDOUT and will not be using
STDOUT in the future, the program can close STDOUT before terminating.
If the program has read all necessary input from STDIN, close STDIN.
Modification Type: | Major | Last Reviewed: | 5/12/2003 |
---|
Keywords: | KB84718 |
---|
|