############# sharedMemoryManager, sharedMemoryManager class ################# ※ Linux only ◎各クラスの役割 ・shared memory manager: 共有メモリ+セマフォを作成管理するクラス ・shared memory client : 共有メモリ+セマフォを使うためのクラス ◎各クラスの関数説明 □================================== shared memory client =================================================□ -------int read(const char *dir ,const char* filename)------int read(const char *pathAndFilename)----------- 役割:  ファイルから、共有メモリのidとセマフォのidを取得します。 (2行目にある最初の数字を共有メモリ、次の数字をセマフォのIDとして取得します) 引数 dir : ディレクトリ filename : ファイル名 pathAndFilename : ファイルまでの相対パス(or絶対パス) 返り値  エラー時は-1が返ります。成功時には0が返ります。 ※ 読み込んだ内容は、public 変数の sharedMemoryID, semaphoreIDに代入されています。 ------int lock(int sem_id,int target=0)------------------------------------------------------------ 役割:  指定されたidのセマフォをロックします  ロックできるまでプログラムは停止しし続けます 引数 sem_id : セマフォのidを入力します target : アクセスするセマフォの番号を入力します(省略可能) デフォルトでは一番最初のものにアクセスします。 返り値  エラー時は-1が返ります。成功時には0が返ります。 ------int lock(int semphore_id,double timeOutSec,int target=0)------------------------------------- 役割:  指定されたidのセマフォをロックします  規定した時間までプログラムは停止しし続けます 引数 sem_id : セマフォのidを入力します timeOutSec : タイムアウト時間を規定します(秒) 規定した時間が経過しても確保できない場合 -1 が返ります target : アクセスするセマフォの番号を入力します(省略可能) デフォルトでは一番最初のものにアクセスします。 返り値  エラー時は-1が返ります。成功時には0が返ります。 ------int unlock(int sem_id,int target=0)----------------------------------------------------------- 役割:  指定されたidのセマフォをアンロックします  アンロックできるまでプログラムは停止しし続けます 引数 sem_id : セマフォのidを入力します target : アクセスするセマフォの番号を入力します(省略可能) デフォルトでは一番最初のものにアクセスします。 返り値  エラー時は-1が返ります。成功時には0が返ります。 -------int unlock(int semphore_id,double timeOutSec,int target=0)----------------------------------- 役割:  指定されたidのセマフォをアンロックします  規定した時間までプログラムは停止しし続けます 引数 sem_id : セマフォのidを入力します timeOutSec : タイムアウト時間を規定します(秒) 規定した時間が経過しても確保できない場合 -1 が返ります target : アクセスするセマフォの番号を入力します(省略可能) デフォルトでは一番最初のものにアクセスします。 返り値  エラー時は-1が返ります。成功時には0が返ります。 --------SHARED_MEMORY_STRUCT* returnPointer(int id)------------------------------------------------- 役割 shared memory のポインタを返します 引数 id : 共有メモリのid 返り値 領域が存在しない場合は、NULLが返り、 存在する場合はそのこへのポインタが返ります。 --------int semaphoreCheck(int sem_id )--------------------------------------------------------------- 役割 セマフォがアクセス可能かを調べます 引数 sem_id : 共有メモリのid 返り値 セマフォが存在しない場合は、0が返り 存在する場合は1が返ります。 +++ MEMO(簡単な使い方など) +++ sharedMemoryClient test; //< >の中には使いたい型名 sharedMemoryClient test2; int id ; struct myStructure *ptr; ptr = retrunPointer(id); □================================== shared memory manager =================================================□ --------int add(int memorySize, const char *explanation);----------------------------------------------------- 役割: 共有メモリを作成 すでに存在する場合はカウントアップして、 アタッチしている共有メモリの数をカウントアップします 引数: memorySize :共有メモリの使用サイズ( byte) *explain :共有メモリの使用用途(文字列) 返り値: 作成に失敗した場合-1,成功した場合 memory idが返り、アタッチカウントを増やしたときは0が返ります。 [ex] add( sizeof(double), "StockValue") [ex] add( 8, "StockValue") --------void erase(int memorySize, const char *explain);-------------------------------------------------------- 役割: 該当する共有メモリを削除(もしくはAttach cntを減算します) 引数: memorySize :共有メモリの使用サイズ( byte) *explain :共有メモリの使用用途(文字列) 返り値: 削除した場合 1 ,アタッチ数を減算する場合 0 --------void eraseAll()----------------------------------------------------------------------------------------- 役割:  アタッチしている共有メモリの数にかかわらず  強制的に全shared memoryを削除します  (デストラクタでも呼び出されます) --------void outputList(FILE *fp)------------------------------------------------------------------------------- 役割:  出力先を指定して Shared memory listを表示  ファイルポインタを渡せばファイルに書き込みでき、 stdout, stderrなどで、ターミナルに表示できます --------void display()------------------------------------------------------------------------------------------ 役割:  ターミナルに情報を表示させる --------void write(int memSize, const char *explain)------------------------------------------------------------ 役割:   共有メモリ、セマフォを1つ出力((*explain).txt) ※ ディレクトリ指定できないので注意(実行ファイルと同じ階層に作成される) --------void write(const char* filepathAndName)--------void write(const char* path, const char* filename);------ 役割:  共有メモリ、セマフォをまとめて出力(filename.txt) 引数 dir : ディレクトリ filename : ファイル名 pathAndFilename : ファイルまでの相対パス(or絶対パス) 返り値  エラー時は-1が返ります。成功時には0が返ります。 ◎===================================その他(注意事項等)============================================== @ 共有メモリの作成に関して  同じ大きさ、同じ説明をしたときのみaddはカウントアップされます  なので、用途は同じだけど、サイズが違うものは違う共有メモリとして認識されます A sharedMemoryManagerクラスは、exit(1)やCtr + Cでプログラムを終了すると開放することができません。