stat y lstat
Uso del comando stat:
/**
* @author IYATT-yx
* @brief 获取文件部分属性
*/
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("请指定一个参数为要查询大小的文件!\n");
return -1;
}
struct stat st;
int ret = stat(argv[1], &st);
if (ret == -1)
{
perror("stat");
return -1;
}
printf("%s的大小为%ld\n", argv[1], st.st_size);
// 文件类型, 1法
if (S_ISREG(st.st_mode))
{
printf("1@这是一个普通文件\n");
}
else if (S_ISDIR(st.st_mode))
{
printf("1@这是一个目录文件\n");
}
else if (S_ISLNK(st.st_mode))
{
printf("1@这是一个符号链接文件\n");
}
else if (S_ISSOCK(st.st_mode))
{
printf("1@这是一个套接字文件\n");
}
else if (S_ISBLK(st.st_mode))
{
printf("1@这是一个块设备文件\n");
}
else if (S_ISCHR(st.st_mode))
{
printf("1@这是一个字符设备文件\n");
}
else if (S_ISFIFO(st.st_mode))
{
printf("1@这是一个管道文件\n");
}
// 文件类型, 2法
int type = st.st_mode & S_IFMT;
switch (type)
{
case S_IFREG:
printf("2@这是一个普通文件\n");
break;
case S_IFDIR:
printf("2@这是一个目录文件\n");
break;
case S_IFLNK:
printf("2@这是一个符号链接文件\n");
break;
case S_IFSOCK:
printf("2@这是一个套接字文件\n");
break;
case S_IFBLK:
printf("2@这是一个块设备文件\n");
break;
case S_IFCHR:
printf("这是一个字符设备文件\n");
break;
case S_IFIFO:
printf("这是一个管道文件\n");
break;
default:
break;
}
}
El ejemplo anterior con la stat
función, hay similares lstat
y la fstat
principal diferencia está en el uso del archivo de enlace suave stat y lstat cuando la consulta es un archivo de enlace suave, stat penetrará en la consulta para archivar puntos de enlace suave, mientras que lstat puede verificar soft Los atributos del archivo vinculado en sí. El fstat es principalmente la diferencia de parámetro. Tanto stat como lstat se consultan por nombre de archivo, mientras que fstat se consulta por el descriptor de archivo de valor de retorno del archivo abierto. La información específica se puede man
consultar mediante comandos. También debería ser fácil tener en cuenta que, la familia de funciones de estadísticas puede verificar los atributos del archivo y el ls -l
contenido que se muestra casi de la misma manera.
estructura estadística
struct stat
{
// 文件的设备编号
dev_t st_dev;
// 节点
ino_t st_ino;
// 文件的类型和存取的权限
mode_t st_mode;
// 链到该文件的硬链接数目
nlink_t st_nlink;
// 用户ID
uid_t st_uid;
// 组ID
gid_t st_gid;
// (设备类型)若此文件为设备文件,则为其设备编号
dev_t st_rdev;
// 文件字节数
off_t st_size;
// 块大小 (文件系统的I/O缓冲区大小)
blksize_t st_blksize;
// 块数
blkcnt_t st_blocks;
// 最后一次访问时间
time_t st_atime;
// 最后一次内容修改时间
time_t st_mtime;
// 最后一次属性修改时间
time_t st_ctime;
};
st_mode (entero de 16 bits)
- 0 ~ 2 personas o Otros usuarios
S_IROTH | 00004 | leer |
S_IWOTH | 00002 | escribir |
S_IXOTH | 00001 | llevado a cabo |
S_IRWXO | 00007 | Enmascarar, filtrar permisos no o |
* 3 ~ 5 dígitos pertenecen al grupo de usuarios
S_IRGRP | 00040 | leer |
S_IWGRP | 00020 | escribir |
S_IXGRP | 00010 | llevado a cabo |
S_IRWXG | 00070 | Enmascarar, filtrar permisos que no sean g |
* 6 ~ 8 propietarios de archivos u
S_IRUSR | 00400 | leer |
S_IWUSR | 00200 | escribir |
S_IXUSR | 00100 | llevado a cabo |
S_IRWXU | 00700 | Enmascarar, filtrar permisos que no sean u |
* Tipo de archivo de 12 ~ 15 bits
S_IFSOCK | 0140000 | Enchufe |
S_IFLNK | 0120000 | Enlace simbólico (enlace suave) |
S_IFREG | 0100000 | Archivo normal |
S_IFBLK | 0060000 | Bloquear dispositivo |
S_IFDIR | 0040000 | Tabla de contenido |
S_IFCHR | 0020000 | Dispositivo de caracteres |
S_IFIFO | 0010000 | tubería |
S_IFMT | 0170000 | Código de inundación, filtrar información de tipo que no sea de archivo |
/**
* @author IYATT-yx
* @brief 检测文件属性: 存在,读,写,操作
*/
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("请指定一个参数为要查询的文件!\n");
return -1;
}
if (access(argv[1], F_OK) == -1)
{
perror("access");
return -1;
}
else
{
if (access(argv[1], R_OK) == 0)
{
printf("R");
}
if (access(argv[1], W_OK) == 0)
{
printf("W");
}
if (access(argv[1], X_OK) == 0)
{
printf("X");
}
printf("\n");
}
}
Modificar permisos de archivo: chmod
función
Modificar propietario o grupo de archivo: chown
función
Modificar tamaño de archivo: truncate
función
Cambiar atributos de archivos abiertos: fcntl
función