Programación de E / S de archivos de Linux

Programación de E / S de archivos

En File IO, se utiliza un descriptor de archivo para representar un archivo abierto, que puede acceder a diferentes tipos de archivos, como archivos ordinarios, archivos de dispositivo y archivos de canalización.

1. Apertura y cierre de expedientes

函数原型:int open(const char *pathname, int flags, int perms)
函数参数:pathname 被打开的文件名
		 flags 文件打开的方式
		 perms 新建文件的存取权限
函数返回值:成功---返回文件描述符;失败--- -1
valor de las banderas Descripción del valor
O_RDONLY Abra el archivo como de solo lectura
O_WRONLY Abra el archivo en modo de solo escritura
O_RDWR Abrir archivo para leer y escribir
O_CREAT Si el archivo no existe, cree un nuevo archivo y use el parámetro perms para establecer permisos para él.
O_EXCL Si el archivo ya existe cuando se usa O_CREAT, se puede devolver un mensaje de error
O_NOCTTY Si se abre el archivo de terminal, la interrupción no se convertirá en el terminal de control del proceso actual
O_TRUNC Si el archivo existe, se eliminarán los datos originales del archivo y el tamaño del archivo se establecerá en 0
O_APPEND Al escribir un archivo, la posición de lectura y escritura del archivo apunta automáticamente al final del archivo
函数原型:int close(int fd)
函数参数:fd 文件描述符
函数返回值:成功--- 0;失败--- -1

2. Archivo de lectura y escritura

函数原型:ssize_t read(int fd, void *buf, size_t count)
函数参数:fd 文件描述符
		 buf 指定存储器读出数据的缓冲区
		 count 指定读出的字节数
函数返回值:成功---读到的字节数;出错--- -1; 到达文件尾--- 0
函数原型:ssize_t write(int fd, void *buf, size_t count)
函数参数:fd 文件描述符
		 buf 指定存储器写入数据的缓冲区
		 count 指定写入的字节数
函数返回值:成功---已写的字节数;出错--- -1

3. Ubicación del archivo

La función lseek () localiza la posición actual de lectura y escritura del archivo. Solo puede operar en archivos localizables (accesibles aleatoriamente). Las tuberías, los enchufes y la mayoría de los archivos de dispositivos de caracteres no admiten este tipo de operaciones.

函数原型:off_t lseek(int fd, off_t offset, int whence)
函数参数:fd 文件描述符
  		 offset 相对于基准值的偏移量,以字节为单位,正数表示向前移动,负数表示向后移动
  		 whence 基准值  
  		        -->SEEK_SET 代表文件起始位置
  				-->SEEK_END 代表文件结束位置
  				-->SEEK_CUR 代表文件当前读写位置
函数返回值:成功---文件当前读写位置;失败--- -1

4. Bloqueo de archivos

Cuando varios programas trabajan juntos en un archivo compartido, el archivo se bloquea para resolver la competencia por los recursos compartidos.

函数原型:int fcntl(int fd, int cmd, struct * flock)
函数参数:fd 文件描述符
  		 cmd -->F_GETLK:检测文件锁状态
  		     -->F_SETLK:设置lock描述的文件锁
  		     -->F_SETLKW:F_SETLK的阻塞版本
  			 -->若无法获取锁,会进入睡眠状态;若可以获取锁或捕捉到信号则会返回
  		 flock 如果cmd和锁操作有关,则需要使用该参数
函数返回值:成功--- 0;失败--- -1
flock 结构体定义
struct flock{
    
    
	short l_type;	
	off_t l_start;	
	short l_whence;	
	off_t l_len;	
	pid_t l_pid;	
}
estructura de la bandada Significado de cada miembro
l_type F_RDLCK: bloqueo de lectura (bloqueo compartido)
F_WRLCK: bloqueo de escritura (bloqueo exclusivo)
F_UNLCK: desbloquear
l_start El desplazamiento relativo (bytes) del área bloqueada en el archivo, junto con l_whence, determina la posición real del área bloqueada
l_de ahí SEEK_SET: la posición actual es el comienzo del archivo y la nueva posición es el tamaño del desplazamiento
SEEK_CUR: la posición actual es la posición del puntero del archivo, y la nueva posición es la posición actual más el desplazamiento
SEEK_END: ​​la posición actual es el final del archivo y la nueva posición es la longitud del archivo más el desplazamiento
l_len La longitud del área bloqueada
l_pid Con un candado que bloquea el proceso actual, el número de proceso del proceso de retención se almacena en l_pid, que solo lo devuelve F_GETLK

Para bloquear todo el archivo: l_start = 0; l_whence = SEEK_SET; l_len = 0

Supongo que te gusta

Origin blog.csdn.net/Chuangke_Andy/article/details/108257412
Recomendado
Clasificación