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
|
.\" Copyright (c) 1990, 1991 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" Chris Torek and the American National Standards Committee X3,
.\" on Information Processing Systems.
.\"
.\" 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.
.\"
.\" @(#)fopen.3 6.8 (Berkeley) 6/29/91
.\"
.\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu
.\" Modified, aeb, 960421, 970806
.\" Modified, joey, aeb, 2002-01-03
.\" Translated into Spanish Mon Jan 19 1998 by
.\" Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es>
.\" Translation revised Tue Apr 18 2000 by Juan Piernas <piernas@ditec.um.es>
.\" Traducción revisada por Miguel Pérez Ibars <mpi79470@alu.um.es> el 2-marzo-2005
.\"
.TH FOPEN 3 "3 enero 2002" "BSD" "Manual del Programador de Linux"
.SH NOMBRE
fopen, fdopen, freopen \- funciones de apertura de flujos
.SH SINOPSIS
.B #include <stdio.h>
.sp
.BI "FILE *fopen(const char *" path ", const char *" mode );
.br
.BI "FILE *fdopen(int " fildes ", const char *" mode );
.br
.BI "FILE *freopen(const char *" path ", const char *" mode ", FILE *" stream );
.SH DESCRIPCIÓN
La función
.B fopen
abre el fichero cuyo nombre es la cadena apuntada por
.I camino
y asocia un flujo de datos a él.
.PP
El argumento
.I modo
apunta a una cadena que empieza con una de las siguientes secuencias
(a las que pueden seguir caracteres adicionales):
.TP
.B r
Abre un fichero de texto para lectura. El flujo se posiciona al
principio del fichero.
.TP
.B r+
Abre para lectura y escritura. El flujo se posiciona al principio del fichero.
.TP
.B w
Trunca el fichero a longitud cero o crea un fichero de texto para
escritura. El flujo se posiciona al principio del fichero.
.TP
.B w+
Abre para lectura y escritura. El fichero se crea si no existe, en
otro caso se trunca. El flujo se posiciona al principio del fichero.
.TP
.B a
Abre para añadir (escribir al final del fichero). El fichero se crea si no existe. El flujo se
posiciona al final del fichero.
.TP
.B a+
Abre para leer y añadir (escribir al final del fichero). El fichero se crea si no existe. El flujo se
posiciona al final del fichero.
.PP
La cadena
.I modo
también puede incluir la letra ``b'' como último carácter o entre
los de cualquiera de las cadenas de dos caracteres descritas
anteriormente. Todo esto es estrictamente por compatibilidad con ANSI
X3.159-1989 (``ANSI C'') y no tiene efecto. La ``b'' se ignora en todos los
sistemas conformes con POSIX, incluido Linux.
(Otros sistemas pueden tratar los ficheros de texto y los ficheros binarios
de forma diferente, y añadir la ``b'' puede ser una buena idea si realiza
E/S de un fichero binario y espera que su programa pueda ser transportado a
entornos no Unix).
.PP
Cualquier fichero creado tendrá de permisos
.BR S_IRUSR \&| S_IWUSR \&| S_IRGRP \&| S_IWGRP \&| S_IROTH \&| S_IWOTH
(0666), modificados por el valor de la máscara umask del proceso (vea
.BR umask (2)).
.PP
Las lecturas y las escrituras pueden mezclarse en flujos abiertos para
lectura/escritura en cualquier orden. Observe que C ANSI requiere que
intervenga una función de posicionamiento entre la salida y la
entrada, a menos que una operación de entrada encuentre el
fin-de-fichero. (Si esta condición no se cumple, entonces se permite a
una lectura devolver el resultado de escrituras distintas a la más
reciente.)
Por lo tanto es buena práctica (y desde luego necesario algunas veces
bajo Linux) hacer una operación
.B fseek
o
.B fgetpos
entre operaciones de escritura y lectura en tal flujo. Esta operación
puede ser aparentemente inútil (como en \fIfseek(..., 0L, SEEK_CUR)\fR),
llamada por su efecto lateral de sincronización.
.PP
Abrir un fichero para añadir (\fBa\fR como primer carácter de
.IR mode )
implica que todas las operaciones de escritura posteriores sobre el flujo
se realicen al final del fichero, como si fueran precedidas por una llamada
.RS
fseek(stream,0,SEEK_END);
.RE.
.PP
La función
.B fdopen
asocia un flujo con el descriptor de fichero existente,
.IR descf .
El
.I modo
del flujo (uno de los valores "r", "r+", "w", "w+", "a", "a+") debe ser
compatible con el del descriptor de fichero. Al indicador de posición de
fichero del nuevo flujo se le asigna el valor del indicador de posición
perteneciente a
.IR descf
y los indicadores de error y de fin-de-fichero se limpian. Los modos "w" y
"w+" no provocan el trucamiento del fichero.
El descriptor de fichero no es \fIdup\fPlicado y se cerrará cuando el
flujo creado por
.B fdopen
se cierre.
El resultado de aplicar
.I fdopen
a un objeto compartido de memoria es indefinido.
.PP
La función
.B freopen
abre el fichero cuyo nombre es la cadena apuntada por
.I camino
y asocia el flujo apuntado por
.I flujo
con él. El flujo original (si existe) se cierra. El argumento
.I modo
se emplea igual que en la función \fBfopen\fP. El uso principal de
la función
.B freopen
es cambiar el fichero asociado con un flujo de texto estándar
.IR "" ( stderr ", " stdin ", o " stdout ).
.SH "VALOR DEVUELTO"
Cuando acaban bien,
.BR fopen ,
.B fdopen
y
.B freopen
devuelven un puntero a \fBFILE\fP. Cuando no, devuelven
.B NULL
y la variable global
.I errno
contiene un valor que indica el error.
.SH ERRORES
.TP
.B EINVAL
El
.I modo
pasado a
.BR fopen ,
.BR fdopen ,
o a
.B freopen
no era válido.
.PP
Las funciones
.BR fopen ,
.B fdopen
y
.B freopen
también pueden fallar y poner un valor en
.I errno
para cualquiera de los errores especificados para la rutina
.BR malloc (3).
.PP
La función
.B fopen
también puede fallar y poner un valor en
.I errno
para cualquiera de los errores especificados para la rutina
.BR open (2).
.PP
La función
.B fdopen
también puede fallar y poner un valor en
.I errno
para cualquiera de los errores especificados para la rutina
.BR fcntl (2).
.PP
La función
.B freopen
también puede fallar y poner un valor en
.I errno
para cualquiera de los errores especificados para las rutinas
.BR open (2),
.BR fclose (3)
y
.BR fflush (3).
.SH CONFORME A
Las funciones
.B fopen
y
.B freopen
son conformes con ANSI X3.159-1989 (``C ANSI''). La función
.B fdopen
es conforme con IEEE Std1003.1-1988 (``POSIX.1'').
.SH "VÉASE TAMBIÉN"
.BR open (2),
.BR fclose (3),
.BR fileno (3)
|