_get_osfhandle

Aus RAD Studio
Wechseln zu: Navigation, Suche

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++

+