主要涉及のCreateFile、CreateFileMapping関数、GetLastErrorを、のMapViewOfFile、sprintfの、OpenFileMapping、のCreateProcess
ファイルハンドルを取得CREATEFILE
ハンドルマッピングを作成するCreateFileMapping関数
マップの上部を示す工程でのMapViewOfFile仮想アドレス空間、(最大のマッピングの一部であってもよい完了し、大規模ではありません)
プロセスのCreateProcessを作成します。
参考:
sprintfのBaiduの百科事典。MapOfview
詳細CreateFile関数(実際に詳細) - findumars -ブログパーク CreateFileMapping関数
MapViewOfFile -ジェーンブック の共有メモリマップファイル(ファイルマップ) - - Windowsのプロセス間通信の間には、VS2012の下で送受信-ララの風を-ブログパーク
charlsonzhaoさんのブログ - - CSDNのブログC ++整数入力データがファイルから読み込まれます
プロセスのリファレンスを作成しますのCreateProcess()関数を詳細-夜空の明るい星を- CSDNのブログの プロセスの下で作成されたウィンドウを、詳細および使用方法のCreateProcess() -システムアーキテクト- CSDNのブログの 詳細のCreateProcess()関数-夜空の明るい星- CSDNブログ のCreateProcessの例- hisin王の柱- CSDNのブログ
内容:
共有メモリを使用して2つの通信を使用してのWin32 APIプログラミング。カタロニア語生産プロセスは、シーケンスを生成し、共有メモリ・オブジェクトを書き込みます。消費者は、共有メモリからの出力シーケンスを読んで処理します。
コマンドライン指定の数によって生成されたカタラン数。
カタロニア自然の数:
H(N)/ H(N-1)*(4 * N-2)=(N + 1)。H(N)= C(2N、N)/(N + 1)(N = 0,1,2、...)H(N)= C(2N、N)C(2N、N-1) (N = 0,1,2、...)
H(0)= 1、H(1)= 1つのH(N)= H(0)* H(N-1)+ H(1)* H(N-2)+ ... + H(N- 1)* H(0)〜(N> = 2)
簡単探している:注文F(2)(n)はF(3)= 1の場合、F(N + 1)= F *(4 * N-6)/ NをIF =。しかし、ここでは4 *は、n-6 / nが分裂しません。
[i]は*(4 *のJ-6)/ Jをカタロニア語も
主にCreateFile、CreateFileMapping関数、GetLastErrorを、のMapViewOfFile、sprintfの、OpenFileMapping、CreateProcess関数に関連します。
機能の役割:
ファイルハンドルを取得CREATEFILE
ハンドルマッピングを作成するCreateFileMapping関数
マップの上部を示す工程でのMapViewOfFile仮想アドレス空間、(最大のマッピングの一部であってもよい完了し、大規模ではありません)
CreateProcessを作成プロセス。
パラメータと機能の役割:
CreateFile(LPCTSTR lpFileName、// DWORDのdwDesiredAccessのファイル名へのポインタ、//アクセスモード(読み取り/書き込み)DWORD dwShareModeをHANDLE、//共有モードは、DWORDを作成するには、どのようにセキュリティ属性DWORD dwCreationDisposition、//を指すようにlpSecurityAttributes、//ポインタをLPSECURITY_ATTRIBUTES dwFlagsAndAttributes、//ファイル属性は、ファイルハンドルをコピーするために使用hTemplateFile //)を処理。
HANDLE WINAPI CreateFileMapping関数(
hFileをHANDLE _In_、
_In_opt_ LPSECURITY_ATTRIBUTES lpAttributes、
_In_ DWORD flProtect、
_In_ DWORD dwMaximumSizeHigh、
_In_ DWORD dwMaximumSizeLow、
_In_opt_ LPCTSTR lpName
);
(CreateFileMapping関数HANDLE
hFileをハンドル//物理ファイルを扱います
LPSECURITY_ATTRIBUTES lpAttributes、//セキュリティ設定
DWORD flProtect、// Protected Setupの
DWORD dwMaximumSizeHigh、//高ファイルサイズ(私たちのゲームが32であるので、ここでは0に設定されているため)
DWORD dwMaximumSizeLow、//低いファイルサイズ
LPCTSTR lpName //共有メモリ名
);
BOOLのCreateProcess(
LPCTSTR lpApplicationName、//アプリケーション名
LPTSTR lpCommandLine、//コマンドライン文字列
セキュリティはLPSECURITY_ATTRIBUTES lpProcessAttributes、//プロセス属性
セキュリティはLPSECURITY_ATTRIBUTES lpThreadAttributes、//スレッド属性
BOOL bInheritHandles、//親プロセスのプロパティを継承します
DWORD dwCreationFlagsは、//ロゴを作成します
LPVOID lpEnvironment、新しい環境のブロックを指すように//ポインタ
LPCTSTR lpCurrentDirectory、//現在のディレクトリ名へのポインタ
LPSTARTUPINFO lpStartupInfo、新しいプロセスに渡される//情報
LPPROCESS_INFORMATION lpProcessInformationは、新たなプロセスに関する情報を返します//
);
問題が発生しました:
1. CreateFileMapping関数エラー
解決:GetLastError関数は、間違ったファイルのサイズであることが判明パラメータが調整0の後に、エラーメッセージを解決するべきではありません取得する(ブックファイルが既に存在する場合、それは本当のサイズをマッピングしますので、0,0です)
キーを押して表示する入力問題が発生したどのように2
ソリューション:
(;私はsizekを<;私は++ i = 0をint型)について
{
int型;
T =はsprintf((CHAR *)lpMapAddress + J、 "%d個の\ rをする\ n"、カタロニア語[I])。J + = T; }
どのように出力問3
ソリューション:printfの%sの使用のダイレクト出力
リファレンスは、「オペレーティングシステムの概念、第7版」P301の一例であり、二つのプログラムを書きました。(私はこの本は確かに問題だと思うが、それは私に一時間を犯さ)
遭遇した最大の問題は、中央の始まりは、間違った上CreateFileMapping関数で、その結果、エラーチェックを行うことを忘れているが、私は愚かな質問はsprintfを見つけ、時間を無駄にしました。
プログラムの出力を書く時間があり、結果は時間を無駄にすることが判明した。だから、問題の解決を目的としたプログラミング、むしろショー自体よりも、少し点c ++ものを誇示したかったです。
一つの深遠な経験があります。我々は慎重に関数のパラメータ、明確な役割を分析する必要があります。問題を引き起こす可能性が0に設定されている場合、そこに指定された画像サイズパラメータなどCreateFileMapping関数、(コンパイラは与えられていません)。(GetLastErrorを1006)
出典:
レンダリング: