12.07.2015 Views

RedHawk Linux User's Guide version 6.3 日本語版

RedHawk Linux User's Guide version 6.3 日本語版

RedHawk Linux User's Guide version 6.3 日本語版

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

リアルタイム・プロセス 間 通 信対 応 する 共 有 メモリ 領 域 データ 構 造造 体 shmid_dsの 定 義 は、 図 3-3に 示 すメンバー 含 みます。図 3-3 shmid_ds 構 造造 体 の 定 義struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */time_t shm_atime; /* last attach time */time_t shm_dtime; /* last detach time */time_t shm_ctime; /* last change time */unsigned short shm_cpid; /* pid of creator */unsigned short shm_lpid; /* pid of last operator */short shm_nattch; /* no. of current attaches */};共 有 メモリ 領 域 のデータ 構 造造 体 shmid_ds 用 のC 言 語 データ 構 造造 体 の 定 義 は、ヘッダファイルの 中 にあります。この 構 造造 体 のshm_permメンバはテンプレートしてipc_permを 使 うことに 注 意 してください。IPC 機 能 のためにipc_permデータ 構 造造 体 は 全 て 同 じで、これはヘッダファイルの 中にあります。shmget(2)システムコールは2つの 仕 事 を 実 行 :• 新 しい 共 有 メモリ 識 別 子 を 取 得 し、 対 応 する 共 有 メモリ 領 域 データ 構 造造 体 を 作 成 します• 対 応 する 共 有 メモリ 領 域 データ 構 造造 体 を 持 っている 既 存 の 共 有 メモリ 識 別 子 を 返 します実 行 されるタスクは、shmgetシステムコールに 渡 すkey 引 数 の 値 によって 決 定 されます。key は 遥 択 した 整 数 、もしくはftokサブルーチンの 使 用 により 生 成 した 整 数 にすることが 可 能 です。ftokサブルーチンは 提 供 されたパス 名 と 識 別 子 をベースとするキーを 生 成 します。ftokを 使用 することで、ユニークなキーを 取 得 することが 可 能 になり、パス 名 に 関 連連 するファイルへのアクセス 制 限 でキーへのユーザーのアクセス 制 御 が 可 能 となります。もし 協 同 プロセスだけが 使 用可 能 なキーを 確 保 したい 場 合 、ftokを 使 用 することを 推 奨 します。このサブルーチンは 以 下 のように 指 定 されます。key_t ftok( path_name, id )path_name 引 数 は 呼 び 出 し 元 プロセスが 利 用 可 能 である 既 存 のファイルのパス 名 のポインタを 指定 します。id 引 数 は 協 同 プロセスグループを 独 自 に 特 定 する 文 字 を 指 定 します。ftokは 指 定 されたpath_name とid に 基 づくキーを 返 します。ftokの 使 用 に 関 する 追 加 情 報 はftok(3)のmanページの 中 で 提 供 されます。もしkey が 既 に 既 存 の 共 有 メモリ 識 別 子 に 使 用 されておらずshmflg にIPC_CREATフラグ 設 定 されている 場 合 、 新 しい 識 別 子 はシステム・チューニング・パラメータを 超 えない 条 件 で 作 成 された 共 有 メモリ 領 域 データ 構 造造 体 と 一 緒 に 返 されます。3-17

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!