IPC通信システムID値が指定されなければならない確立します。典型的には、ftok ID機能により得られた値。次のようにftokプロトタイプは次のとおりです。key_tのftok(するchar * fnameは、int型のID)を使用すると、ファイル名を指定するときにfnameが(ファイルが存在し、アクセス可能でなければならない)、idがなどのintが、サブ番号であるが、唯一の8ビットが使用されています(0〜255)。正常に実行された場合、key_tの値がそれ以外の場合は-1が返され、返されます。典型的なUNIXの実装では、iノード番号は、戻り値key_tのが先行サブシーケンス番号を取り出します。指定されたファイルのiノード番号は16進0x26、最後key_tの戻り値0x26010002の観点から、38のID値を指定し、進0x010002の観点から、65538です。方法のクエリファイルのiノード番号は、次のとおりLS -i以下の試験手順:の#include< stdio.hの>の#include< SYS /types.hで>の#include< SYS /ipc.h>の#define IPCKEY 0x11int主(ボイド){I = 0をint型、場合(i = 1; I< 256; ++ I)のprintf("キー=%X \\ n" ftok(" /TMP"、i))を、0を返します;成功して獲得した後}
キー、キーは、共有メモリモードなどたshmget、何らかの方法で、プロセス間通信のキー値として使用することができます。
関数プロトタイプ
たshmgetは
INTたshmget(key_tの、size_tの、フラグ)である正常に作成された後
は、
は、共有メモリ記述子を戻します。で使用したshmget key_tのftok
の方法により生成される
例:
の#include< SYS /shm.h>の#include< stdio.hの>の#include<。 ERRNO.H>の#include< string.hの>の#include< STDLIB.H>
の#define SIZE 1024
のexternのint型のerrno;
のint main()の{INT shmidを;場合は、共有メモリを作成
//((shmidを=たshmget(IPC_PRIVATE、SIZE、0600))< 0)* shmptrチャー{のprintf("たshmgetエラー:%S \\ N"。 、はstrerror(errnoに));戻り-1;}
//利用可能なアドレス
IF((shmptr =(CHAR *)にshmat(shmidを、0、0に接続された共有メモリ))==(ボイド*) - 1){のprintf("にshmatエラー:%S \\ N"はstrerror(errnoに)); -1を返す;}のmemcpy(shmptr、"のHello World"のsizeof("。 Hello World"));のprintf("%LXへ%LX、コンテンツから共有メモリ:%S \\ n",(unsigned long型)shmptr、(unsigned long型)(shmptr + SIZE)、shmptr);
//取り外し共有メモリ((shmctl(shmidを、IPC_RMID、0)< 0))なら、{のprintf(" shmctlエラー:%S \\ N"はstrerror(errnoに));戻り-1;}} < BR>
マルチプロセス共有メモリ条件:
の#include< SYS /shm.h>の#include< stdio.hの>の#include< ERRNO.H>の#include< string.hの>の#include< STDLIB。 H>の#include< unistd.h>の#include< SYS /types.hで>の#include< SYS /wait.h>
の#define SIZE 1024
のexternのint型のerrno;
int型のmain(){int型shmidを、CHAR * shmptr; key_tのキー; pid_tのPID;
IF((PID =フォーク())< 0){のprintf("フォークエラー:%S \\ N"はstrerror(errnoに)); -1を返す;}そうでない場合(PID == 0){睡眠(2)IF((キー= ftok("を/dev /null"、1)) < 0){のprintf(" ftokエラー:%S \\ N"はstrerror(errnoに)); -1を返す;}もし、((shmidを=たshmget(キー、SIZE、0600))< 0){のprintf( "たshmgetエラー:%S \\ N"はstrerror(errnoに));出口(-1);}
IF((shmptr =(CHAR *)にshmat(shmidを、0、0))== (ボイド*) - 1){のprintf("にshmatエラー:%S \\ N"はstrerror(errnoに));出口(-1);} //のmemcpy(shmptr、"のHello World"のsizeof("。こんにちは、世界"));のprintf("子:PIDは、%D、%から共有メモリであり、 %LX、コンテンツへLX:%S \\ n", GETPID()、(unsigned long型)shmptr、(長い符号なし)(shmptr + SIZE)、shmptr);のprintf("子プロセススリープ2秒\\ n")。睡眠(2); {のprintf(" shmctlエラー:%S \\ N"はstrerror(errnoに));出口(-1);};(0)(shmctl(shmidを、IPC_RMID、0)<)もし出口( 0);} //他の親{IF((キー= ftok("を/dev /null"、1))< 0){のprintf(" ftokエラー:%S \\ N"はstrerror(errnoに)); -1を返す;}もし、((shmidを=たshmget(キー、SIZE、0600
は長い時間(約3日)を得て、そしてついに成功しました。最初は私はあきらめたいと思いましたが、ゆっくりと問題を知り始めました。それでも同じ文:持続は勝利です! ! まず、図に示すようにホストマシンのI
初心者のLinux(私もそうです)では、仮想マシンでLinuxを台無しにしたくない、そしてUbuntuをインストールするのにwubiを使用したくないこの比較的簡単なLinuxのインストールとインストー
を解読する仕事と研究の都合上、 Windows 7上でLinux(Red Hat Enterprise Linux 5)を操作するにはSecurecurtを使用する必要があります。漢字を見ると文字化
をLinuxにインストールする方法必要なjdkをLinuxにインストールする方法?前回、Linuxに付属のjdkをアンインストールする方法について説明しました。どうすればいいですか。 Xiaobian
ソリッドステートドライブをインストールする方法?ソリッドステートドライブを分割する方法?
ファイバをアップグレードした後にネットワーク速度が遅い場合はどうすればいいですか。より遅い光ファイバネットワーク速度の理由と解決策
ノートブックをGhostに復元した後の総クラッシュの問題を解決する方法
Win10 Mobileの正式バージョンは12月に発売される予定です:それは他のより多くのデバイスをカバーするでしょう
Intel CPUを解決すると、Windows 8のシステム画面が
アサシンクリード2の全ストーリー分析アサシンクリード2のプロットレイダースは、