Skip to content

Commit a7aa697

Browse files
author
Colin Robertson
committed
Address 1050 unexpected return value
1 parent f391a10 commit a7aa697

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

docs/c-runtime-library/reference/get-osfhandle.md

+8-2
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,16 @@ An existing file descriptor.
2727

2828
## Return Value
2929

30-
Returns an operating-system file handle if *fd* is valid. Otherwise, the invalid parameter handler is invoked, as described in [Parameter Validation](../../c-runtime-library/parameter-validation.md). If execution is allowed to continue, this function returns **INVALID_HANDLE_VALUE** (-1) and sets **errno** to **EBADF**, indicating an invalid file handle. To avoid a compiler warning when the result is used in routines that expect a Win32 file handle, cast it to a **HANDLE** type.
30+
Returns an operating-system file handle if *fd* is valid. Otherwise, the invalid parameter handler is invoked, as described in [Parameter Validation](../../c-runtime-library/parameter-validation.md). If execution is allowed to continue, it returns **INVALID_HANDLE_VALUE** (-1). It also sets **errno** to **EBADF**, indicating an invalid file handle. To avoid a warning when the result is used as a Win32 file handle, cast it to a **HANDLE** type.
31+
32+
> [!NOTE]
33+
> When **stdin**, **stdout**, and **stderr** aren't associated with a stream (for example, in a Windows application without a console window), the file descriptor values for these streams are returned from [_fileno](fileno.md) as the special value -2. Similarly, if you use a 0, 1, or 2 as the file descriptor parameter instead of the result of a call to **_fileno**, **_get_osfhandle** also returns the special value -2 when the file descriptor is not associated with a stream, and does not set **errno**. However, this is not a valid file handle value, and subsequent calls that attempt to use it are likely to fail.
34+
35+
For more information about **EBADF** and other error codes, see [_doserrno, errno, _sys_errlist, and _sys_nerr](../../c-runtime-library/errno-doserrno-sys-errlist-and-sys-nerr.md).
3136

3237
## Remarks
3338

34-
To close a file whose operating system (OS) file handle is obtained by **_get_osfhandle**, call [_close](close.md) on the file descriptor *fd*. Do not call **CloseHandle** on the return value of this function. The underlying OS file handle is owned by the *fd* file descriptor, and is closed when [_close](close.md) is called on *fd*. If the file descriptor is owned by a `FILE *` stream, then calling [fclose](fclose-fcloseall.md) on that `FILE *` stream closes both the file descriptor and the underlying OS file handle. In this case, do not call [_close](close.md) on the file descriptor.
39+
To close a file whose operating system (OS) file handle is obtained by **_get_osfhandle**, call [_close](close.md) on the file descriptor *fd*. Never call **CloseHandle** on the return value of this function. The underlying OS file handle is owned by the *fd* file descriptor, and is closed when [_close](close.md) is called on *fd*. If the file descriptor is owned by a `FILE *` stream, then calling [fclose](fclose-fcloseall.md) on that `FILE *` stream closes both the file descriptor and the underlying OS file handle. In this case, don't call [_close](close.md) on the file descriptor.
3540

3641
## Requirements
3742

@@ -48,3 +53,4 @@ For more compatibility information, see [Compatibility](../../c-runtime-library/
4853
[_creat, _wcreat](creat-wcreat.md)<br/>
4954
[_dup, _dup2](dup-dup2.md)<br/>
5055
[_open, _wopen](open-wopen.md)<br/>
56+
[\_open_osfhandle](open-osfhandle.md)

docs/c-runtime-library/reference/open-osfhandle.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ms.assetid: 30d94df4-7868-4667-a401-9eb67ecb7855
1010
---
1111
# _open_osfhandle
1212

13-
Associates a C run-time file descriptor with an existing operating-system file handle.
13+
Associates a C run-time file descriptor with an existing operating system file handle.
1414

1515
## Syntax
1616

@@ -24,7 +24,7 @@ int _open_osfhandle (
2424
### Parameters
2525

2626
*osfhandle*<br/>
27-
Operating-system file handle.
27+
Operating system file handle.
2828

2929
*flags*<br/>
3030
Types of operations allowed.
@@ -35,7 +35,7 @@ If successful, **_open_osfhandle** returns a C run-time file descriptor. Otherwi
3535

3636
## Remarks
3737

38-
The **_open_osfhandle** function allocates a C run-time file descriptor and associates it with the operating-system file handle specified by *osfhandle*. To avoid a compiler warning, cast the *osfhandle* argument from **HANDLE** to **intptr_t**. The *flags* argument is an integer expression formed from one or more of the manifest constants defined in \<fcntl.h>. When two or more manifest constants are used to form the *flags* argument, the constants are combined with the bitwise-OR operator ( **&#124;** ).
38+
The **_open_osfhandle** function allocates a C run-time file descriptor. It associates this file descriptor with the operating system file handle specified by *osfhandle*. To avoid a compiler warning, cast the *osfhandle* argument from **HANDLE** to **intptr_t**. The *flags* argument is an integer expression formed from one or more of the manifest constants defined in \<fcntl.h>. You can use the bitwise-OR operator ( **&#124;** ) to combine two or more manifest constants to form the *flags* argument.
3939

4040
These manifest constants are defined in \<fcntl.h>:
4141

@@ -46,7 +46,7 @@ These manifest constants are defined in \<fcntl.h>:
4646
| **\_O\_TEXT** | Opens the file in text (translated) mode. |
4747
| **\_O\_WTEXT** | Opens the file in Unicode (translated UTF-16) mode. |
4848

49-
The **_open_osfhandle** call transfers ownership of the Win32 file handle to the file descriptor. To close a file opened by using **_open_osfhandle**, call [\_close](close.md). The underlying OS file handle is also closed by a call to **_close**. Don't call the Win32 function **CloseHandle** on the original handle. If the file descriptor is owned by a **FILE &#42;** stream, then a call to [fclose](fclose-fcloseall.md) on that **FILE &#42;** stream closes both the file descriptor and the underlying handle. In this case, don't call **_close** on the file descriptor or **CloseHandle** on the original handle.
49+
The **_open_osfhandle** call transfers ownership of the Win32 file handle to the file descriptor. To close a file opened by using **_open_osfhandle**, call [\_close](close.md). The underlying OS file handle is also closed by a call to **_close**. Don't call the Win32 function **CloseHandle** on the original handle. If the file descriptor is owned by a **FILE &#42;** stream, then a call to [fclose](fclose-fcloseall.md) closes both the file descriptor and the underlying handle. In this case, don't call **_close** on the file descriptor or **CloseHandle** on the original handle.
5050

5151
## Requirements
5252

@@ -59,3 +59,4 @@ For more compatibility information, see [Compatibility](../../c-runtime-library/
5959
## See also
6060

6161
[File Handling](../../c-runtime-library/file-handling.md)<br/>
62+
[\_get_osfhandle](get-osfhandle.md)

0 commit comments

Comments
 (0)