aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man2/open.2
blob: 330d1be4d91e0a70b03d3d99dc5bf714ae6a6c2f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
.\" Copyright (c) 1980, 1991, 1993
.\"	The Regents of the University of California.  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.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
.\"
.\"     @(#)open.2	8.2 (Berkeley) 11/16/93
.\" %FreeBSD: src/lib/libc/sys/open.2,v 1.11.2.8 2001/08/17 15:42:45 ru Exp %
.\"
.\" $FreeBSD: doc/ja_JP.eucJP/man/man2/open.2,v 1.9 2001/07/29 05:15:14 horikawa Exp $
.Dd November 16, 1993
.Dt OPEN 2
.Os
.Sh 名称
.Nm open
.Nd 読取りまたは書込み用にファイルをオープンする、または作成する
.Sh ライブラリ
.Lb libc
.Sh 書式
.Fd #include <fcntl.h>
.Ft int
.Fn open "const char *path" "int flags" "..."
.Sh 解説
.Fa path
によって指定されるファイルを、引数
.Fa flags
によって指定されたように読取りまたは書込み
(またはその両方) 用にオープンし、
そのファイル記述子を呼び出し元プロセスに返します。
ファイルが存在しない場合にはファイルを
作成するように、
.Fa flags
引数で指示できます
.Dv ( O_CREAT
フラグを指定する)。
この場合、
.Nm
には 3 番目の引数
.Fa "mode_t mode"
が必要であり、ファイルは
.Xr chmod 2
で説明されているようにモード
.Fa mode
で作成され、プロセスの umask 値によって修正されます
.Pf ( Xr umask 2
を参照)。
.Pp
指定されたフラグは次の値の論理和
.\".Em or Ns 'ing
.Em ( or )
で作成されます。
.Pp
.Bd -literal -offset indent -compact
O_RDONLY	読取り専用でオープン
O_WRONLY	書込み専用でオープン
O_RDWR		読取りと書込み用にオープン
O_NONBLOCK	オープンするときにブロックしない
O_APPEND	書込みのたびに末尾に追加する
O_CREAT		ファイルが存在しない場合、作成する
O_TRUNC		サイズを 0 に切り捨てる
O_EXCL		作成するファイルが既に存在した場合、エラーとする
O_SHLOCK	共有ロックを自動的に取得する
O_EXLOCK	排他的ロックを自動的に取得する
O_DIRECT	キャッシュの効果を無くすまたは減らす
O_FSYNC		同期的に書き込む
O_NOFOLLOW	シンボリックリンクを辿らない
.Ed
.Pp
.Dv O_APPEND
を設定してファイルをオープンすると、
ファイルへの書込みはすべてファイルの末尾に追加されます。
.Dv O_TRUNC
が指定されていてファイルが存在する場合、ファイルは長さ 0 に
切り捨てられます。
.Dv O_EXCL
が
.Dv O_CREAT
とともに設定されていてファイルが既に存在する場合、
.Fn open
はエラーを返します。これを使用して、
簡単な排他的アクセスロッキングメカニズムを
実現できます。
.Dv O_EXCL
が設定されていてパス名の最後の構成要素がシンボリックリンクの場合、
たとえシンボリックリンクが存在しない名前を指していたとしても
.Fn open
は処理に失敗します。
.Dv O_NONBLOCK
フラグが指定されていて
.Fn open
呼び出しの結果、プロセスが何らかの理由でブロックされると (たとえば、
ダイアルアップ回線でキャリアを待っている場合)、
.Fn open
は即座に戻ります。プロセスがオープンしたファイルに
最初に入出力しようとしたとき、プロセスはブロックします
(現時点では実装されていません)。
.Pp
.Dv O_FSYNC
がマスクに使用された場合、
すべての書き込みは直ちにディスクに書き込まれ、
カーネルは書き込まれたデータをキャッシュせず、
書き込むべきすべてのデータが完了するまでは
この記述子に対するすべての書き込みは戻りません。
.Pp
.Dv O_NOFOLLOW
がマスクに使用された場合で
.Fn open
に渡された対象ファイルがシンボリックリンクの場合、
.Fn open
は失敗します。
.Pp
ファイルをオープンするときに、
.Xr flock 2
を使ったロックを得るには、共有ロックについては
.Dv O_SHLOCK 、
排他的ロックについては
.Dv O_EXLOCK
を設定します。
.Dv O_CREAT
でファイルを作成する場合、ロック要求が失敗すること
はありません (ただし、下層にあるファイルシステムが
ロックをサポートしている場合に限ります)。
.Pp
読み書きにおけるキャッシュの効果を最小化もしくは無くすために
.Dv O_DIRECT
を使用可能です。
システムは、読み書きするデータのキャッシングを避けようとします。
データのキャッシングが避けられない場合、
データのキャッシュに対する影響を最小化します。
注意せずに使用すると、本フラグは劇的に性能を劣化させます。
.Pp
正常に完了すると、
.Fn open
は、ファイル記述子を示す負でない整数を返します。
処理に失敗すると -1 を返します。ファイル内の現在の位置をマークする
ファイルポインタはファイルの先頭に設定されます。
.Pp
新しいファイルが作成される場合、そのグループは
ファイルが含まれるディレクトリのグループに設定されます。
.Pp
新しい記述子は
.Xr execve 2
システムコールを通じてオープンされたままであるように設定されます。
.Xr close 2
と
.Xr fcntl 2
を参照してください。
.Pp
システムには、1 つのプロセスによって同時にオープンできる
ファイル記述子数に制限があります。
.Xr getdtablesize 2
は現在のシステム制限を返します。
.Sh 実装に関する注
非スレッドライブラリでは、
.Fn open
は
.Va open
システムコールとして実装されています。
.Pp
スレッドライブラリでは、
.Va open
システムコールは
.Fn _thread_sys_open
にアセンブルされ、
.Fn open
は、スレッドの再スケジュールを無効にし
.Fn _thread_sys_open
を呼び出す関数として実装されています。
戻る前に、
.Fn open
はスレッドの再スケジュールを有効にします。
.Sh 戻り値
正常に完了すると、
.Fn open
はファイル記述子である負でない整数を返します。
処理に失敗すると -1 が返され、エラーを示すために
.Va errno
が設定されます。
.Sh エラー
指定のファイルは次の場合を除いてオープンされます。
.Bl -tag -width Er
.It Bq Er ENOTDIR
パスの構成要素中にディレクトリ以外のものが含まれています。
.It Bq Er ENAMETOOLONG
パス名の構成要素が 255 文字を越えているか、
またはパス名全体が 1023 文字を越えています。
.It Bq Er ENOENT
指定されたファイルが存在せず、
.Dv O_CREAT
も設定されていません。
.It Bq Er ENOENT
存在しなければならないパス名の構成要素が存在しません。
.It Bq Er EACCES
指定されたパスには、検索が許可されていないディレクトリが含まれています。
.It Bq Er EACCES
要求されたパーミッション (読取りまたは書込み用、または両方) が
指定のフラグに拒否されています。
.It Bq Er EACCES
.Dv O_CREAT
が指定されていて、ファイルが存在せず、かつファイルを作成する
ディレクトリに書込み許可がありません。
.It Bq Er ELOOP
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
.It Bq Er EISDIR
指定のファイルがディレクトリであり、これを書込み用に
オープンするように引数が指定されています。
.It Bq Er EROFS
指定されたファイルは読取り専用ファイルシステム上にあり、
そのファイルを修正しようとしています。
.It Bq Er EMFILE
プロセスは、すでにオープンできるファイル記述子に関する
制限に達しています。
.It Bq Er ENFILE
システムファイルテーブルが満杯です。
.It Bq Er EMLINK
.Dv O_NOFOLLOW
が指定され、対象がシンボリックリンクです。
.It Bq Er ENXIO
指定のファイルはキャラクタ型特殊ファイルまたはブロック型特殊
ファイルであり、この特殊ファイルに結び付けられたデバイスは
存在していません。
.It Bq Er ENXIO
指定されたファイルは FIFO パイプで、どのプロセスからも
読取り用にオープンされていないにも関らず、
これを書込み用にオープンしようとしました。
.It Bq Er EINTR
.Fn open
操作がシグナルによって割り込みされました。
.It Bq Er EOPNOTSUPP
.Dv O_SHLOCK
または
.Dv O_EXLOCK
が指定されましたが、下層となっているファイルシステムは
ロックをサポートしていません。
.It Bq Er EWOULDBLOCK
.Dv O_NONBLOCK
と、
.Dv O_SHLOCK
か
.Dv O_EXLOCK
のどちらかが指定されましたが、ファイルはロックされています。
.It Bq Er ENOSPC
.Dv O_CREAT
が指定されていて、ファイルが存在せず、新しいファイル用のエントリを
配置中のディレクトリは、そのディレクトリを含むファイルシステムに
空間が残っていないため拡張できません。
.It Bq Er ENOSPC
.Dv O_CREAT
が指定されていて、ファイルが存在せず、かつファイルが作成中の
ファイルシステム上に未使用の inode がありません。
.It Bq Er EDQUOT
.Dv O_CREAT
が指定されていて、ファイルが存在せず、かつ新しいファイル用の
エントリを配置中のディレクトリは、そのディレクトリを含む
ファイルシステム上でディスクブロックの
ユーザのクォータが枯渇したために拡張できません。
.It Bq Er EDQUOT
.Dv O_CREAT
が指定されていて、ファイルが存在せず、かつファイルを作成中の
ファイルシステム上で inode のユーザのクォータが枯渇しています。
.It Bq Er EIO
ディレクトリエントリを作成中、または
.Dv O_CREAT
用の inode を割当て中に入出力エラーが発生しました。
.It Bq Er ETXTBSY
ファイルは純粋な手続き (共有テキスト) ファイルで、
.Fn open
が書込みアクセスを要求しましたが、ファイルは実行中です。
.It Bq Er EFAULT
.Fa path
は、プロセスに割り当てられたアドレス空間の範囲外を指しています。
.It Bq Er EEXIST
.Dv O_CREAT
と
.Dv O_EXCL
が指定されていて、ファイルが存在します。
.It Bq Er EOPNOTSUPP
ソケットをオープンしようとしました (現時点では実装されていません)。
.It Bq Er EINVAL
.Dv O_RDONLY ,
.Dv O_WRONLY
および
.Dv O_RDWR
の不正な組合わせで記述子をオープンしようとしました。
.El
.Sh 関連項目
.Xr chmod 2 ,
.Xr close 2 ,
.Xr dup 2 ,
.Xr getdtablesize 2 ,
.Xr lseek 2 ,
.Xr read 2 ,
.Xr umask 2 ,
.Xr write 2
.Sh 歴史
.Fn open
関数は
.At v6
で登場しました。