共有メモリ通信のWindows APIを使用します

主要涉及の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)

出典:

 


 

 


 

 


 

 


 

レンダリング:

 


 

 


 

 

おすすめ

転載: www.cnblogs.com/lqerio/p/11117642.html