Unix-system-calls-flock
[top]#
|http://www.google.com/[Google] | a|
Web | This Site |
選択した読書 Copyright©2014 by finddevguides |
[cols=",,,,,,,",] |
| | Home | | References | | Discussion Forums | | About TP
[width="100%",cols="100%",] |
a| == flock()-Unix、Linuxシステムコール
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]
広告
NAME
flock-開いているファイルに助言ロックを適用または削除する
概要
#include <sys/file.h> int flock(int fd, int operation); |
説明
_fd_で指定された開いているファイルのアドバイザリロックを適用または削除します。 パラメーター_operation_は次のいずれかです。
Tag | Description |
---|---|
LOCK_SH | Place a shared lock. More than one process may hold a shared lock for a given file at a given time. |
LOCK_EX | Place an exclusive lock. Only one process may hold an exclusive lock for a given file at a given time. |
LOCK_UN | Remove an existing lock held by this process. |
互換性のないロックが別のプロセスによって保持されている場合、 flock ()の呼び出しはブロックする場合があります。 ノンブロッキングリクエストを行うには、上記の操作のいずれかに LOCK_NB (ORingによる)を含めます。
1つのファイルに、共有ロックと排他ロックの両方を同時に設定することはできません。
プロセスが open (2)(または同様)を使用して同じファイルの複数の記述子を取得する場合、これらの記述子は flock ()によって独立して扱われます。 これらのファイル記述子のいずれかを使用してファイルをロックしようとする試みは、呼び出しプロセスが別の記述子を介してすでに行っているロックによって拒否される場合があります。
プロセスは、ファイルに対して1つのタイプのロック(共有または排他)のみを保持できます。 すでにロックされているファイルに対する後続の flock ()呼び出しは、既存のロックを新しいロックモードに変換します。
ファイルが開かれたモードに関係なく、ファイルに共有ロックまたは排他ロックをかけることができます。
返り値
成功すると、ゼロが返されます。 エラーの場合、-1が返され、_errno_が適切に設定されます。
エラー
Error Code | Description |
---|---|
EBADF | fd is not a not an open file descriptor. |
EINTR | While waiting to acquire a lock, the call was interrupted by delivery of a signal caught by a handler. |
EINVAL | operation is invalid. |
ENOLCK | The kernel ran out of memory for allocating lock records. |
*EWOULDBLOCK * | The file is locked and the* LOCK_NB* flag was selected. |
準拠
4.4BSD( flock (2)呼び出しは4.2BSDで初めて登場しました)。 fcntl (2)の観点から実装されている可能性のある flock (2)のバージョンは、ほとんどのUnicesに表示されます。
ノート
カーネル2.0以降、 flock (2)は、 fcntl (2)の呼び出しとしてGNU Cライブラリでエミュレートされるのではなく、独自のシステムコールとして実装されます。 これにより、真のBSDセマンティクスが得られます。 flock (2)と fcntl (2)によって設定されたロックのタイプ間の相互作用はなく、 flock (2)はデッドロックを検出しません。
ロックの変換(共有から排他、またはその逆)はアトミックであるとは限りません。最初に既存のロックが削除され、次に新しいロックが確立されます。 これらの2つのステップの間で、別のプロセスによる保留中のロック要求が許可され、その結果、変換がブロックされるか、 LOCK_NB が指定された場合は失敗します。 (これは元のBSDの動作であり、他の多くの実装で発生します。)
関連項目
- http://www.finddevguides.com/unix_system_calls/close [閉じる(2)]
- dup(2)
- execve(2)
- fcntl(2)
- fork(2)
- open(2)
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]
広告
|
[cols="^",] |
|Advertisements