赞
踩
stat
函数是一个在UNIX和类UNIX操作系统中广泛使用的系统调用,用于获取指定文件的详细信息,包括文件的权限、大小、类型、所有者、修改时间等等。它通常用于编写程序,以便检查和操作文件的属性和元数据。
- /*
- * #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- int stat(const char *pathname, struct stat *statbuf);
- 作用: 查看一个文件的信息
- 参数:
- -pathname:操作的文件路径
- -statbuf:结构体变量,传出参数
- 返回值:
- 成功:返回0
- 失败:返回-1,errno
- int lstat(const char *pathname, struct stat *statbuf);
- 作用:
- 参数:
- -pathname:操作的文件路径
- -statbuf:结构体变量,传出参数
- 返回值:
- 成功:返回0
- 失败:返回-1,errno
- struct stat {
- dev_t st_dev; // 文件所在设备的设备号
- ino_t st_ino; // 文件的i-node号
- mode_t st_mode; // 文件权限和文件类型
- nlink_t st_nlink; // 链接数
- uid_t st_uid; // 文件所有者的用户ID
- gid_t st_gid; // 文件所属组的组ID
- off_t st_size; // 文件大小(字节数)
- blksize_t st_blksize; // 文件系统I/O操作的块大小
- blkcnt_t st_blocks; // 文件占用的块数
- time_t st_atime; // 最后访问时间
- time_t st_mtime; // 最后修改时间
- time_t st_ctime; // 最后状态改变时间
- };
- */
-
-
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <stdio.h>
- int main(){
- struct stat statbuf;
- int ret = stat("F:\\C++\\C++\\c++linux\\linux_io_fun\\examples.txt",&statbuf);
- if(ret==-1){
- perror("stat");
- return -1;
- }
- printf("size:%ld\n",statbuf.st_size);
- return 0;
- }
创建软连接:
ln -s a.txt b.txt
lstat
函数是在UNIX和类UNIX操作系统中使用的系统调用,它与 stat
函数类似,用于获取文件的详细信息,包括文件的权限、大小、类型、所有者、修改时间等等。但是,lstat
与 stat
之间存在一个重要的区别,即 lstat
专门用于获取符号链接(symlink)文件的信息,而不是跟踪符号链接所指向的目标文件。
- #include <sys/stat.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
-
- int main() {
- const char *filename = "symlink_example"; // 符号链接文件的路径
- struct stat file_info;
-
- // 使用lstat函数获取符号链接文件的信息
- if (lstat(filename, &file_info) == 0) {
- printf("文件名:%s\n", filename);
- printf("文件大小:%lld 字节\n", (long long)file_info.st_size);
- printf("权限:%o\n", file_info.st_mode & 0777); // 文件权限
- printf("所有者的用户ID:%d\n", file_info.st_uid);
- printf("所有者的组ID:%d\n", file_info.st_gid);
- printf("修改时间:%s", ctime(&file_info.st_mtime)); // 修改时间
-
- // 其他信息如访问时间等也可以从file_info结构中获取
-
- } else {
- perror("lstat"); // 输出错误信息
- return errno; // 返回错误代码
- }
-
- return 0;
- }
文件权限是指在UNIX和类UNIX操作系统中,用于控制文件和目录访问的权限。这些权限通常表示为三组权限位:用户权限、组权限和其他权限。每个权限位可以设置为读取(r)、写入(w)和执行(x)的组合。在文件权限中,按位与(bitwise AND)通常用于检查某个用户是否具有特定权限。
以下是文件权限的一些常见值和它们的含义:
每个文件或目录都有三个权限集:
为了检查用户是否具有某个权限,可以使用按位与运算来比较用户的权限位和所需的权限位。这里是一些示例:
- if (权限位 & 4) {
- // 用户具有读取权限
- }
- if (权限位 & 2) {
- // 用户具有写入权限
- }
- if (权限位 & 1) {
- // 用户具有执行权限
- }
权限位是一个包含用户、组和其他权限的三位二进制数字。按位与运算用来检查相应的权限位是否设置为1,如果设置为1,则表示用户具有该权限。
我们使用 S_IFMT
(八进制)进行与运算,提取了文件类型信息,然后根据不同的文件类型值进行了判断。这允许你确定文件的基本类型,如普通文件、目录、符号链接等。请注意,stat
函数用于获取文件信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。