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