_get_osfhandle

提供: RAD Studio
移動先: 案内検索

io.h:インデックス への移動


ヘッダーファイル

io.h

カテゴリ

入出力ルーチン

プロトタイプ

long _get_osfhandle(int filehandle);

説明

ファイルハンドルを関連付けます。

_get_osfhandle 関数は,オペレーティングシステムのファイルハンドルを既存の実行時ファイルハンドルと関連付けます。変数 filehandle は,プログラムのファイルハンドルです。

戻り値

成功した場合,_get_osfhandle は,変数 filehandle に対応するオペレーティングシステムのファイルハンドルを返します。

エラーが発生した場合は -1 を返し,グローバル変数に次の値を設定します。

EBADF

無効なファイルハンドル





 #include <windows.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <io.h>
 //_get_osfhandle() と _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;      // message
   if (!InitApplication(hInstance))  // 共有物を初期化します
    return (FALSE); // 初期化できない場合は終了します
   /* 特定のインスタンスに適用される初期化を実行します */
   if (!(InitInstance(hInstance, nCmdShow)))
    return (FALSE);
   /* WM_QUIT メッセージを受け取るまで,メッセージを取得してディスパッチします。*/
   while (GetMessage(&msg, // メッセージ構造体
    NULL, // メッセージを受け取るウィンドウのハンドル
    NULL, // 調べる必要がある最下位のメッセージ
    NULL))  // 調べる必要がある最上位のメッセージ
   {
   TranslateMessage(&msg); // 仮想キーコードの変換
   DispatchMessage(&msg);  // メッセージをウィンドウにディスパッチします
   }
   return (msg.wParam);  // PostQuitMessage からの値を返します
 }
 BOOL InitApplication(HINSTANCE hInstance)
 {
   WNDCLASS  wc;
   // メインウィンドウを記述するパラメータをウィンドウクラス構造体に
   // 書き込みます
   wc.style = CS_HREDRAW | CS_VREDRAW; // クラススタイル
   wc.lpfnWndProc = (long (FAR PASCAL*)(void *,unsigned int,unsigned int, long ))MainWndProc; // このクラスのウィンドウのメッセージを
                 // 取得する関数
   wc.cbClsExtra = 0;  // クラスの追加データなし
   wc.cbWndExtra = 0;  // ウィンドウの追加データなし
   wc.hInstance = hInstance; // クラスを所有するアプリケーション
   wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
   wc.hCursor = LoadCursor(NULL, IDC_ARROW);
   wc.hbrBackground = GetStockObject(WHITE_BRUSH);
   wc.lpszMenuName = NULL;  // .RC ファイル内のメニューリソースの名前
   wc.lpszClassName = "Example"; // CreateWindow の呼び出しで使用される名前
   /* ウィンドウクラスを登録し,成功/失敗コードを返します */
   return (RegisterClass(&wc));
 }
 HWND InitInstance(HINSTANCE hInstance, int nCmdShow)
 {
   HWND  hWnd; // メインウィンドウのハンドル
   /* このアプリケーションインスタンスのメインウィンドウを作成します  */
   hWnd = CreateWindow(
    "Example",                 // RegisterClass() 呼び出しを参照してください
    "Example _get_osfhandle _open_osfhandle (32 bit)",  // ウィンドウのタイトルバーのテキスト
    WS_OVERLAPPEDWINDOW,        // ウィンドウスタイル
    CW_USEDEFAULT,         // デフォルトの水平位置
    CW_USEDEFAULT,          // デフォルトの垂直位置
    CW_USEDEFAULT,            // デフォルトの幅
    CW_USEDEFAULT,        // デフォルトの高さ
    NULL,                  // オーバーラップウィンドウに親はありません
    NULL,                  // ウィンドウクラスのメニューを使用します
    hInstance,              // このインスタンスはこのウィンドウを所有しています
    NULL                   // ポインタは必要ありません
   );
   /* ウィンドウを作成できなかった場合は,「failure」を返します */
   if (!hWnd)
    return (FALSE);
   /* このウィンドウを表示するには,クライアント領域を更新し,「success」を返します */
   ShowWindow(hWnd, nCmdShow); // ウィンドウを表示します
   UpdateWindow(hWnd);     // WM_PAINT メッセージを送信します
   return (hWnd);        // PostQuitMessage からの値を返します
 }
 #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:  // メッセージ: ウィンドウが破棄されます
       PostQuitMessage(0);
     break;
     default:      // 処理しない場合は転送します
       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;
 }



移植性



POSIX Win32 ANSI C ANSI C++

+