File: fcntl.2

package info (click to toggle)
manpages-es 1.24a-6
  • links: PTS
  • area: main
  • in suites: potato
  • size: 4,256 kB
  • ctags: 7
  • sloc: makefile: 66; sh: 62
file content (377 lines) | stat: -rw-r--r-- 11,457 bytes parent folder | download
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
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
.\"                               1993 Michael Haardt, Ian Jackson;
.\"                               1998 Jamie Lokier.
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\" 
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\" 
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" Modified Sat Jul 24 13:39:26 1993 by Rik Faith (faith@cs.unc.edu)
.\" Modified Tue Sep 26 21:47:21 1995 by Andries Brouwer <aeb@cwi.nl>
.\" and again on 960413 and 989804 and 981223.
.\"
.\" Translated 22 Dec 1995 Miguel A. Sepulveda (miguel@typhoon.harvard.edu)
.\" Modified 1 Jul 1996 Miguel A. Sepulveda (angel@vivaldi.princeton.edu)
.\" Translation fixed and revised on Mon Apr 27 18:22:37 CEST 1998 by
.\" Gerardo Aburruzaga Garca <gerardo.aburruzaga@uca.es>
.\" Translation revised Tue Aug 18 1998 by Juan Piernas <piernas@ditec.um.es>
.\" Translation revised Fri Oct 2 1998 by Juan Piernas <piernas@ditec.um.es>
.\" Modified Fri Dec 11 17:57:27 1998 by Jamie Lokier <jamie@imbolc.ucc.ie>
.\" Translation revised Tue Apr 6 1999 by Juan Piernas <piernas@ditec.um.es>
.\" Translation revised Fri Jun 25 1999 by Juan Piernas <piernas@ditec.um.es>
.\"
.TH FCNTL 2 "23 Diciembre 1998" Linux "Manual del Programador de Linux"
.SH NOMBRE
fcntl \- manipula el descriptor de fichero
.SH SINOPSIS
.nf
.B #include <unistd.h>
.B #include <fcntl.h>
.sp
.BI "int fcntl(int " fd ", int " cmd );
.BI "int fcntl(int " fd ", int " cmd ", long " arg );
.BI "int fcntl(int " fd ", int " cmd ", struct flock * " lock );
.fi
.SH DESCRIPCIN
.B fcntl
realiza una de las diversas y variadas operaciones sobre
.IR fd .
La operacin en cuestin se determina mediante
.IR cmd :
.TP 0.9i
.B F_DUPFD
Hace que 
.I arg
sea una copia de
.IR fd ,
cerrando 
.I fd
si es necesario.
.sp
El mismo resultado se puede obtener fcilmente usando        
.BR dup2 .
.sp
Los descriptores antiguo y nuevo pueden usarse indistintamente. Ambos
comparten candados (locks), indicadores de posicin de ficheros y
banderas (flags); por ejemplo, 
si la posicin del fichero se modifica usando
.B lseek
en uno de los descriptores, la posicin del otro resulta modificada   
simultneamente.
.sp
Sin embargo, los dos descriptores no comparten la bandera close-on-exec
"cerrar-al-ejecutar". La bandera close-on-exec de la copia est
desactivada, singificando que se cerrar en ejecucin.
.sp
En caso de xito, se devuelve el nuevo descriptor.
.TP
.B F_GETFD
Lee la bandera close-on-exec. Si el bit
.B FD_CLOEXEC
es 0, el fichero permanecer abierto durante
.BR exec ,
en caso contrario se cerrar el fichero.
.TP
.B F_SETFD
Asigna el valor de la bandera close-on-exec al valor especificado por el bit
.B FD_CLOEXEC
de
.IR arg .
.TP
.B F_GETFL
Lee las banderas del descriptor (todas las banderas, segn 
hayan sido asignadas por
.BR open (2),
sern devueltas).
.TP
.B F_SETFL
Asigna las banderas del descriptor al valor asignado por
.IR arg .
Slo
.BR O_APPEND ", " O_NONBLOCK " y " O_ASYNC
pueden asignarse; las otras banderas no se ven afectadas.
.sp
Las banderas se comparten entre copias (hechas con
.BR dup "(2), " fork (2),
etc.) del mismo descriptor de fichero.
.sp
Las banderas y su semntica estn descritas en 
.BR open (2).
.P
.BR F_GETLK ", " F_SETLK " y " F_SETLKW
se utilizan para gestionar candados de ficheros
discrecionales (discretionary file locks).
El tercer argumento
.I lock
es un puntero a una struct flock
(que puede ser sobrescrita por esta llamada).
.TP
.B F_GETLK
Devuelve la estructura flock que nos impide obtener el candado, o
establece el campo
.B l_type
del candado a
.B F_UNLCK
si no hay obstruccin.
.TP
.B F_SETLK
El candado est cerrado (cuando
.B l_type
es
.B F_RDLCK
o 
.BR F_WRLCK )
o abierto (cuando es
.BR F_UNLCK ).
Si el candado est cogido por alguien ms, esta llamada devuelve \-1 y
pone en
.I errno 
el cdigo de error
.B EACCES
o
.BR EAGAIN .
.TP
.B F_SETLKW
Como
.BR F_SETLK ,
pero en vez de devolver un error esperamos que el candado se abra.
Si se recibe una seal a capturar mientras
.B fcntl
est esperando, se interrumpe y (despus de que el manejador de la seal
haya terminado) regresa inmediatamente (devolviendo \-1 y
asignado a
.I errno
el valor
.BR EINTR ).
.P
.BR F_GETOWN ", " F_SETOWN ", " F_GETSIG " y " F_SETSIG
se utilizan para gestionar las seales de disponibilidad de E/S:
.TP
.B F_GETOWN
Obtiene el ID de proceso o el grupo de procesos que actualmente recibe las
seales SIGIO y SIGURG para los eventos sobre el descriptor de fichero
.IR fd .
.sp
Los grupos de procesos se devuelven como valores negativos.
.TP
.B F_SETOWN
Establece el ID de proceso o el grupo de procesos que recibir las seales
SIGIO y SIGURG para los eventos sobre el descriptor de fichero
.IR fd .
.sp
Los grupos de procesos se especifican mediante valores negativos.
(Se puede usar
.B F_SETSIG
para especificar una seal diferente a SIGIO).

.\" De glibc.info:
Si activa la bandera de estado
.B O_ASYNC
sobre un descriptor de fichero (tanto si proporciona esta bandera con la
llamada
.IR open (2)
como si usa la orden
.B F_SETFL
de
.BR fcntl ),
se enviar una seal SIGIO cuando sea posible la entrada o la salida sobre
ese descriptor de fichero.
.sp
El proceso o el grupo de procesos que recibir la
seal se puede seleccionar usando la orden
.B F_SETOWN
de la funcin
.BR fcntl .
Si el descriptor de fichero es un enchufe (socket), esto tambin
seleccionar al recipiente de las seales SIGURG que se entregan cuando
llegan datos fuera de orden (out-of-band, OOB) sobre el enchufe. (SIGURG se
enva en cualquier situacin en la que
.BR select (2)
informara que el enchufe tiene una "condicin excepcional"). Si el
descriptor de fichero corresponde a un dispositivo de terminal, entonces las
seales SIGIO se envan al grupo de procesos en primer plano de la terminal.
.TP
.B F_GETSIG
Obtiene la seal enviada cuando la entrada o la salida son posibles. Un
valor cero significa que se enva SIGIO. Cualquier otro valor (incluyendo
SIGIO) es la seal enviada en su lugar y en este caso se dispone de
informacin adicional para el manejador de seal si se instala con
SA_SIGINFO.
.TP
.B F_SETSIG
Establece la seal enviada cuando la entrada o la salida son posibles. Un
valor cero significa enviar la seal por defecto SIGIO. Cualquier otro valor
(incluyendo SIGIO) es la seal a enviar en su lugar y en este caso se
dispone de informacin adiciona para el manejador de seal si se instala con
SA_SIGINFO.
.sp
Usando F_SETSIF con un valor distinto de cero y asignando SA_SIGINFO para el
manejador de seal (vea
.BR sigaction (2)),
se pasa informacin extra sobre los eventos de E/S al manejador en la
estructura
.IR siginfo_t .
Si el campo
.I si_code
indica que la fuente is SI_SIGIO, el campo
.I si_fd
proporciona el descriptor de fichero asociado con el evento. En caso
contrario, no se indican qu descriptores de ficheros hay pendientes y, para
determinar qu descriptores de fichero estn disponibles para E/S, debera
usar los mecanismos usuales
.RB ( select (2),
.BR poll (2),
.BR read (2)
con
.B O_NONBLOCK
activo, etc.).
.sp
Seleccionando una seal de tiempo real POSIX.1b (valor >= SIGRTMIN), se
pueden encolar varios eventos de E/S usando los mismos nmeros de seal. (El
encolamiento depende de la memoria disponible). Se dispone de informacin
extra si se asigna SA_SIGINFO al manejador de seal, como antes.
.PP
Usando estos mecanismos, un programa puede implementar E/S totalmente
asncrona, sin usar
.BR select (2)
ni
.BR poll (2)
la mayor parte del tiempo.
.PP
El uso de 
.BR O_ASYNC ,
.BR F_GETOWN
y
.B F_SETOWN
es especfico de Linux y BSD.
.B F_GETSIG
y
.B F_SETSIG
son especficos de Linux. POSIX posee E/S asncrona y la estructura
.I aio_sigevent
para conseguir cosas similares; estas tambin estn disponibles en Linux
como parte de la biblioteca de C de GNU (GNU C Library, Glibc).
.SH "VALOR DEVUELTO"
Para una llamada con xito, el valor devuelto depende de la operacin:
.TP 0.9i
.B F_DUPFD
El nuevo descriptor.
.TP
.B F_GETFD
Valor de la bandera.
.TP
.B F_GETFL
Valor de las banderas.
.TP
.B F_GETOWN
Valor del propietario del descriptor.
.TP
.B F_GETSIG
Valor de la seal enviada cuando la lectura o la escritura son posibles o
cero para el comportamiento tradicional con SIGIO.
.TP
.B Para cualquier otra orden
Cero.
.PP
En caso de error el valor devuelto es \-1, y 
se pone un valor apropiado en
.IR errno .
.SH ERRORES
.TP 0.9i
.B EACCES
La operacin est prohibida por candados mantenidos por otros
procesos.
.TP
.B EAGAIN
La operacin est prohibida porque el fichero ha sido asociado a
memoria por otro proceso.
.TP
.B EDEADLK
Se ha detectado que el comando
.B F_SETLKW
especificado provocara un
interbloqueo. 
.TP
.B EFAULT
.I lock
est fuera de su espacio de direcciones accesible.
.TP
.B EBADF
.I fd
no es un descriptor de fichero abierto.
.TP
.B EINTR
El comando
.B F_SETLKW
ha sido interrumpido por una seal.
Para
.BR F_GETLK " y " F_SETLK ,
la orden fue interrumpida por una seal antes de que el candado fuera
comprobado o adquirido. Es ms probable al poner un candado a un fichero
remoto (por ejemplo, un candado sobre NFS) pero algunas veces puede ocurrir
localmente.
.TP
.B EINVAL
Para
.BR F_DUPFD ,
.I arg
es negativo o mayor que el valor mximo permitido. Para
.BR F_SETSIG ,
.I arg
no es un nmero de seal permitido.
.TP
.B EMFILE
Para
.BR F_DUPFD ,
el proceso ya ha llegado al nmero mximo de descriptores de ficheros abiertos. 
.TP
.B ENOLCK
Demasiados candados de segmento abiertos, la tabla de candados est llena o
ha fallado un protocolo de candados remoto (por ejemplo, un candado sobre
NFS).
.TP
.B EPERM
Se ha intentado limpiar la bandera
.B O_APPEND
sobre un fichero que tiene activo el atributo de `slo aadir'
(append-only).
.SH NOTAS
Los errores devueltos por
.B dup2
son distintos de aqullos dados por 
.BR F_DUPFD .
.SH "CONFORME A"
SVID, AT&T, POSIX, X/OPEN, BSD 4.3. Slo las operaciones F_DUPFD,
F_GETFD, F_SETFD, F_GETFL, F_SETFL, F_GETLK, F_SETLK y F_SETLKW
se especifican en POSIX.1. F_GETOWN y F_SETOWN son BSD-ismos no
aceptados en SVr4; F_GETSIG y F_SETSIG son especficos de Linux.
Las banderas legales para F_GETFL/F_SETFL son aqullas que acepta
.BR open (2)
y varan entre estos sistemas; O_APPEND, O_NONBLOCK, O_RDONLY
y O_RDWR son las que se mencionan en POSIX.1. SVr4 admite algunas
otras opciones y banderas no documentadas aqu.
.PP
SVr4 documenta las condiciones de error adicionales EIO, ENOLINK y EOVERFLOW.
.SH "VASE TAMBIN"
.BR open (2),
.BR socket (2),
.BR dup2 (2),
.BR flock (2).