_get_osfhandle
Nach oben zu io.h - Index
Header-Datei
io.h
Kategorie
Eingabe-/Ausgaberoutinen
Prototyp
long _get_osfhandle(int filehandle);
Beschreibung
Ordnet Datei-Handles zu.
Die Funktion _get_osfhandle ordnet ein Betriebssystemdatei-Handle einem vorhandenen Laufzeitdatei-Handle zu. Die Variable filehandle enthält das Datei-Handle des ausgeführten Programms.
Rückgabewert
Bei erfolgreicher Ausführung gibt _get_osfhandle ein Betriebssystemdatei-Handle zurück, das der Variablen filehandle entspricht.
Im Fehlerfall gibt die Funktion -1 zurück und weist der globalen Variablen errno einen der folgenden Werte zu:
EBADF |
An invalid file handle (Ungültiges Datei-Handle) |
Beispiel
#include <windows.h>
#include <fcntl.h>
#include <stdio.h>
#include <io.h>
// Beispiel für _get_osfhandle() und _open_osfhandle()
BOOL InitApplication(HINSTANCE hInstance);
HWND InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
Example_get_osfhandle(HWND hWnd);
#pragma argsused
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg; // Meldung
if (!InitApplication(hInstance)) // Gemeinsam genutzte Elemente initialisieren
return (FALSE); // Beenden, wenn Initialisierung nicht möglich ist
/* Initialisierungen durchführen, die für eine bestimmte Instanz gelten */
if (!(InitInstance(hInstance, nCmdShow)))
return (FALSE);
/* Meldungen abrufen und verteilen, bis die Meldung WM_QUIT empfangen wird. */
while (GetMessage(&msg, // Meldungsstruktur
NULL, // Handle des Fensters, das die Meldung empfängt
NULL, // Unterste zu überprüfende Meldung
NULL)) // Höchste zu überprüfende Meldung
{
TranslateMessage(&msg); // Übersetzt virtuelle Tastaturcodes
DispatchMessage(&msg); // Leitet die Meldung an das Fenster weiter
}
return (msg.wParam); // Gibt den Wert von PostQuitMessage zurück
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc;
// Struktur WNDCLASS mit Parametern füllen, die das
// Hauptfenster beschreiben.
wc.style = CS_HREDRAW | CS_VREDRAW; // Fensterklassenstil(e).
wc.lpfnWndProc = (long (FAR PASCAL*)(void *,unsigned int,unsigned int, long ))MainWndProc; // Funktion, die Meldungen für Fenster
// dieser Klasse abrufen soll.
wc.cbClsExtra = 0; // Keine klassenspezifischen zusätzlichen Daten.
wc.cbWndExtra = 0; // Keine fensterspezifischen zusätzlichen Daten.
wc.hInstance = hInstance; // Anwendung, die Besitzer der Klasse ist.
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; // Name der Menüressource in der .RC-Datei.
wc.lpszClassName = "Example"; // Name, der im Aufruf von CreateWindow benutzt wird.
/* Fensterklasse registrieren und Erfolgs-/Fehlercode zurückgeben. */
return (RegisterClass(&wc));
}
HWND InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd; // Handle des Hauptfensters
/* Ein Hauptfenster für diese Anwendungsinstanz erstellen. */
hWnd = CreateWindow(
"Example", // Siehe Aufruf von RegisterClass()
"Example _get_osfhandle _open_osfhandle (32 bit)", // Text für Titelleiste des Fensters
WS_OVERLAPPEDWINDOW, // Fensterstil
CW_USEDEFAULT, // Voreingestellte horizontale Position
CW_USEDEFAULT, // Voreingestellte vertikale Position
CW_USEDEFAULT, // Standardbreite
CW_USEDEFAULT, // Standardhöhe
NULL, // Bei sich überlappenden Fenstern ist kein Fenster übergeordnet.
NULL, // Fensterklassenmenü verwenden
hInstance, // Diese Instanz ist Besitzer dieses Fensters.
NULL // Es wird kein Zeiger benötigt.
);
/* Wenn das Fenster nicht erstellt werden konnte, "failure" zurückgeben. */
if (!hWnd)
return (FALSE);
/* Fenster sichtbar machen, dessen Clientbereich aktualisieren und "success" zurückgeben */
ShowWindow(hWnd, nCmdShow); // Fenster anzeigen
UpdateWindow(hWnd); // Sendet WM_PAINT-Meldung
return (hWnd); // Gibt den Wert von PostQuitMessage zurück.
}
#pragma argsused
LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
Example_get_osfhandle(hWnd);
return NULL;
}
case WM_QUIT:
case WM_DESTROY: // Meldung: Fenster wird gelöscht
PostQuitMessage(0);
break;
default : // Weitergeben, wenn sie nicht verarbeitet wurde
return (DefWindowProc(hWnd, message, wParam, lParam));
}
}
Example_get_osfhandle(HWND hWnd)
{
long osfHandle;
char str[128];
int fHandle = open("file1.c", O_CREAT|O_TEXT);
if(fHandle != -1)
{
osfHandle = _get_osfhandle(fHandle);
sprintf(str, "file handle = %lx OS file handle = %lx", fHandle, osfHandle);
MessageBox(hWnd,str,"_get_osfhandle",MB_OK|MB_ICONINFORMATION);
close(fHandle);
fHandle = _open_osfhandle(osfHandle, O_TEXT );
sprintf(str, "file handle = %lx OS file handle = %lx", fHandle, osfHandle);
MessageBox(hWnd,str,"_open_osfhandle",MB_OK|MB_ICONINFORMATION);
close(fHandle);
}
else
MessageBox(hWnd,"File Open Error","WARNING",MB_OK|MB_ICONSTOP);
return 0;
}
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |