Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxのプログラミング環境-ftok()関数のコメント

Linuxのプログラミング環境-ftok()関数のコメント

  
 (例えば、メッセージキュー、共有メモリ)

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

Copyright © Windowsの知識 All Rights Reserved