.\" .\" Copyright (c) 1995 David Hovemeyer .\" .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" %FreeBSD: src/lib/libc/sys/shmget.2,v 1.18 2004/07/02 23:52:13 ru Exp % .\" .\" $FreeBSD$ .Dd July 3, 1995 .Dt SHMGET 2 .Os .Sh 名称 .Nm shmget .Nd 共有メモリの識別子の取得 .Sh ライブラリ .Lb libc .Sh 書式 .In machine/param.h .In sys/types.h .In sys/ipc.h .In sys/shm.h .Ft int .Fn shmget "key_t key" "size_t size" "int flag" .Sh 解説 .Fn shmget は、 .Fa key と .Fa flag の値に従って、新しく作成した共有メモリセグメント または既存の共有メモリセグメントの識別子を戻します。 .\" .\" The following bit about keys and modes also applies to semaphores .\" and message queues. .\" キーはファイル名に似たもので、IPC オブジェクトを 指定するハンドルを提供するものです。 キーの指定方法には 3 つ方法があります: .Bl -bullet .It IPC_PRIVATE を指定すると新しい IPC オブジェクトが作成されます。 .It 整定数を指定できます。 .Fa key に対応する IPC オブジェクトが指定されておらず、IPC_CREAT ビットが .Fa flag で設定されている場合は、新しい IPC オブジェクトが作成されます。 .It .Xr ftok 3 を使用し、パス名からキーを作成できます。 .El .Pp 新しく作成された IPC オブジェクトのモードは、 .Fa flag 引数に渡す以下の定数の論理和 .Em ( OR ) で決まります: .Bl -tag -width XSHM_WXX6XXX .It Dv SHM_R ユーザ用の読取りアクセス .It Dv SHM_W ユーザ用の書込みアクセス .It Dv ( SHM_R>>3 ) グループ用の読取りアクセス .It Dv ( SHM_W>>3 ) グループ用の書込みアクセス .It Dv ( SHM_R>>6 ) その他用の読取りアクセス .It Dv ( SHM_W>>6 ) その他用の書込みアクセス .El .\" .\" XXX - we should also mention how uid, euid, and gid affect ownership .\" and use .\" .\" end section about keys and modes .\" .Pp 新しい共有メモリセグメントを作成する場合、 .Fa size は、新しいセグメントのバイト単位のサイズを表わします。 セグメントのサイズは、カーネルに便利なようにある倍数に 切り上げられることがあります (すなわちページサイズ)。 .Sh 戻り値 処理が正常に完了すると、 .Fn shmget は共有メモリセグメントの正整数の識別子を返します。 そうでない場合は -1 が返され、エラーを示すために .Va errno が設定されます。 .Sh エラー 以下の場合、 .Fn shmget システムコールは処理を失敗します: .Bl -tag -width Er .\" .\" XXX What about ipcperm failing? .\" .It Bq Er EINVAL 指定したサイズが、既存セグメントのサイズより大きいです。 指定したサイズが、システムの最低値より小さいか、最大値より大きいです。 .It Bq Er ENOENT .Fa key と一致する共有メモリセグメントがなく、IPC_CREAT が指定されていません。 .It Bq Er ENOSPC 要求を満たす十分なメモリを、カーネルが割り当てられません。 .It Bq Er EEXIST IPC_CREAT と IPC_EXCL が指定され、 .Fa key に対応する共有メモリセグメントがすでに存在します。 .El .Sh 関連項目 .Xr shmat 2 , .Xr shmctl 2 , .Xr shmdt 2 , .Xr ftok 3