Prefacio
Las operaciones en archivos deben seguir el orden de apertura del archivo, operación del archivo y cierre del archivo. Cerrar el archivo es lo más importante. Debido a que el archivo en sí es un archivo estático, se creará un archivo dinámico después de abrir el archivo y el contenido del archivo estático se cargará en el búfer buf del archivo dinámico. Todas las operaciones en el archivo se realizan en buf. Si el archivo no está cerrado, el archivo estático no se actualizará sincrónicamente. Después de cerrar el archivo, el archivo estático se actualizará sincrónicamente.
Tabla de contenido
Este artículo describe algunas funciones comúnmente utilizadas para operar archivos en Linux: función open(), función close(), función write(),
función read(), función de posicionamiento del cursor lseek() y algunos problemas menores.
abierto()
Archivo de encabezado :
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Prototipo de función :
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
Función: Al abrir un archivo se devolverá un descriptor de archivo, un número entero (la descripción del archivo se conoce como fd). El descriptor de archivo ejecuta todas las funciones de operación del archivo. Otras funciones pueden acceder al archivo especificado según fd.
Descripción del parámetro :
1.nombre de ruta
El nombre del archivo que se abrirá (incluida la ruta)
2.banderas
Al abrir un archivo, puede pasar una o dos opciones de parámetros para los permisos de acceso al archivo.
O_RDONLY abierto solo lectura
O_WRONLY Abierto solo para escritura
O_RDWR abierto para lectura y escritura
Estos tres parámetros se usan a veces y solo se puede usar uno (es fácil de entender, cuando no puede leer ni escribir, puede hacerlo de solo escritura)
O_CREAT Crea el archivo si no existe. Al utilizar esta opción, también debe especificar el modo del tercer parámetro, que describe los permisos de acceso del nuevo archivo. Si el archivo no existe, créelo.
O_EXCL Si se especifica O_CREAT|O_EXCL, el valor de retorno es -1, lo que significa que el archivo existe.
O_APPEND Agregar este parámetro puede hacer que todo lo escrito se ajuste y se escriba en la siguiente línea.
O_TRUNC Agregue este parámetro para borrar el contenido anterior y reescribir el contenido más reciente.
El uso de la función open() depende del escenario de la aplicación para decidir cuál usar. Si el archivo existe, use el primero. Si no existe, use el segundo. O_CREAT (como O_RDWR|O_CREAT) necesita que se utilizará en la bandera y el modo de registro de la banda Permisos de acceso al archivo creado. Los permisos de acceso a archivos generalmente son de lectura y escritura (0600)
valor de retorno:
Abierto con éxito: devuelve un número entero
Error de apertura: retorno -1
cerca()
Archivo de cabeza:
#include <unistd.h>
Prototipo de función:
int close(int fd);
Función: cerrar un archivo abierto.
Descripción de parámetros:
fd es el descriptor de archivo devuelto por la función de apertura.
valor de retorno:
Cerrar exitosamente: devolver 0
Cierre fallido: retorno -1
Nota: Los archivos abiertos deben cerrarse; de lo contrario, se ocupará una gran cantidad de recursos y se producirá una memoria insuficiente.
escribir()
Archivo de encabezado :
#include <unistd.h>
Prototipo de función :
ssize_t write(int fd, const void *buf, size_t count);
Función: escribe contenido en el archivo al que apunta fd. La explicación vernácula es contar los bytes de datos colocados en el búfer y escribirlos en el archivo abierto.
Descripción del parámetro :
1.intfd
Descriptor de archivo, el número devuelto por la función de apertura después de que se abre correctamente.
2.const nulo *buf
Un puntero sin tipo, el búfer se utiliza para almacenar el contenido que desea escribir.
3.size_t contar
La cantidad de bytes para escribir en el archivo y en cuántos bytes escribir los datos del búfer.
Puede usar sizeof y strlen para encontrar el tamaño del búfer, sizeof calcula el tamaño del puntero buf y strlen calcula el tamaño de la cadena en todo el buf.
Valor de retorno :
Escritura exitosa: devuelve un número entero, que es el número de bytes escritos
Error de escritura: retorno -1
leer()
Archivo de encabezado :
#include <unistd.h>
Prototipo de función :
ssize_t read(int fd, void *buf, size_t count);
Función: leer el contenido del archivo al que apunta fd. La explicación vernácula es leer el conteo de bytes de datos del archivo al que apunta fd y almacenarlo en buf.
Nota: Al definir buf, preste atención al problema de los punteros salvajes y abra espacio para buf.
Descripción del parámetro :
1.intfd
Descriptor de archivo, el número devuelto por la función de apertura después de que se abre correctamente.
2.const nulo *buf
Un puntero sin tipo, el búfer se utiliza para almacenar el contenido que desea leer.
3.size_t contar
Lea la cantidad de bytes del archivo y almacene la cantidad de bytes de datos en el archivo en el búfer.
Valor de retorno :
Lectura exitosa: devuelve el número de bytes leídos (el valor de retorno para archivos en blanco es 0)
Error de lectura: el valor de retorno es -1
Problema con la función de lectura : al leer un archivo, asegúrese de que el cursor del archivo esté en la primera posición; de lo contrario, la lectura quedará en blanco. Explícalo aquí:
Suponiendo que el contenido anterior está escrito en un archivo en blanco, el cursor del archivo llegará a F. Al leer, la lectura comienza desde detrás del cursor, por lo que el contenido leído estará en blanco. Este cursor es similar al que parpadea después de escribir un documento de Word.
Solución:
1. Reabrir. Después de escribir correctamente, cierre el archivo y luego ábralo para mover el cursor a la primera posición.
close(fd);
fd = open("./file1",O_RDWR);
2. Reposicione el cursor. Utilice la función lseek para reposicionar el cursor.
lseek(int fd, offset, int de dónde);
1.文件: #include <sys/types.h>
#include <unistd.h>
2. Descripción del parámetro: fd: descriptor de archivo
desplazamiento: valor de desplazamiento (los números positivos mueven el cursor hacia atrás, los números negativos avanzan) en relación con el desplazamiento de la posición del cursor
int de donde: posición del cursor, que tiene tres tipos:
El cursor SEEK_SET apunta a la cabeza,
El cursor SEEK_CUR apunta a la posición actual,
SEEK_ENDEl cursor apunta al final
lseek(fd,0,SEEK_SET)指到文件头
lseek(fd,0,SEEK_END)指到文件尾
lseek(fd,-17,SEEK_CUR)复数往前移,正数往后移
3. La función lseek puede calcular inteligentemente el tamaño del contenido del archivo: el valor de retorno de lseek es el valor de desplazamiento del encabezado.
int filesize = lseek(fd,0,SEEK_END);
crear()
Archivo de encabezado :
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Prototipo de función :
int creat(const char *pathname, mode_t mode);
Descripción de la función: crear un archivo
Descripción del parámetro :
1.const char *pathname La ruta de almacenamiento del archivo creado
El modo 2.mode_t otorga permisos a los archivos creados. Puedes usar algunos
宏表示 数字
S_IRUSR 4 可读
S_IWUSR 2 可写
S_IXUSR 1 可执行
S_IRWXU 7 可读、写、执行
Valor de retorno :
Devuelve el descriptor de archivo fd para este archivo.