linux 编程之stat 获取文件信息

Linux 下有如下API 可以用来获取文件相关信息,譬如文件大小,修改时间等;

       #include 
       #include 
       #include 

       int stat(const char *pathname, struct stat *buf);
       int fstat(int fd, struct stat *buf);
       int lstat(const char *pathname, struct stat *buf);

//struct stat 结构体
            struct stat {
             dev_t     st_dev;         /* ID of device containing file */ 文件ID
             ino_t     st_ino;         /* inode number */  文件节点
             mode_t    st_mode;        /* protection */  文件的模式
             nink_t   st_nlink;       /* number of hard links */  文件的硬链接数
             uid_t     st_uid;         /* user ID of owner */   文件所有者ID
             gid_t     st_gid;         /* group ID of owner */  文件的组ID
             dev_t     st_rdev;        /* device ID (if special file) */ 文件的设备ID
             off_t     st_size;        /* total size, in bytes */
             blksize_t st_blksize;     /* blocksize for filesystem I/O */  文件系统块大小
              blkcnt_t  st_blocks;      /* number of 512B blocks allocated */ 文件块大小

             /* Since Linux 2.6, the kernel supports nanosecond
                precision for the following timestamp fields.
                For the details before Linux 2.6, see NOTES. */

             struct timespec st_atim;  /* time of last access */  文件最后访问时间
             struct timespec st_mtim;  /* time of last modification */ 文件最后修改时间
             struct timespec st_ctim;  /* time of last status change */文件最后状态改变时间

           #define st_atime st_atim.tv_sec      /* Backward compatibility */
           #define st_mtime st_mtim.tv_sec
           #define st_ctime st_ctim.tv_sec
           };


实例过程是:通过执行程序 参数为需要查看文件信息的文件名

调用getFileStat()函数获取相关文件信息。

//stat.c

#include
#include
#include
#include
//getFileStat()函数获取文件状态信息
int getFileStat(const char*filePath,struct stat*fileStat);

int main(int argc,char*argv[])
{

//判断输入是否合法
	if (argc!=2)
	{
		printf("please input:%s fileName\n",argv[0]);
		return 0;
	}

	printf("file name is :%s\n",argv[1]);
	
	struct stat file_sta;
	struct stat* sta=&file_sta;
	int ret=getFileStat(argv[1],sta);
	if(ret<0)
	{
		
		printf("getfiled\n");
	}

	return 0;
}


//getFileStat()函数获取文件状态信息
int getFileStat( const char*filePath,struct stat*fileStat)
{
	if(filePath==NULL||fileStat==NULL)
	{
		
		printf("input file err\n");
		return -1;
	}
	
	if((stat(filePath,fileStat))<0)
	{	
		perror("stat");
		return -1;
	}
	printf("包含此文件的设备ID: %d\n",fileStat->st_dev);
	printf("此文件的节点: %d\n",fileStat->st_ino);
	printf("此文件的保护模式: %d\n",fileStat->st_mode);
	printf("此文件的硬链接数:%d\n",fileStat->st_nlink);
	printf("此文件所有者的ID: %d\n",fileStat->st_uid);
	printf("此文件所有者的组ID:%d",fileStat->st_gid);
	printf("此文件用字节计的大小:%d\n",fileStat->st_rdev);
	printf("此文件系统的块大小:%d\n",fileStat->st_blksize);
	printf("此文件占用块的数量:%d\n",fileStat->st_blocks);
	printf("此文件最后访问时间: %d\n",fileStat->st_atime);
	printf("此文件最后修改时间: %d\n",fileStat->st_mtime);
	printf("此文件最后状态改变时间: %d\n",fileStat->st_ctime);
	
}

运行结果:

zdg@ubuntu:/mnt/hgfs/SHARE/3.文件系统$ ./a.out  1.txt 
file name is :1.txt
包含此文件的设备ID: 40
此文件的节点: 5150
此文件的保护模式: 33279
此文件的硬链接数:1
此文件所有者的ID: 0
此文件所有者的组ID:0此文件用字节计的大小:0
此文件系统的块大小:1024
此文件占用块的数量:1
此文件最后访问时间: 1587922372
此文件最后修改时间: 1587922372
此文件最后状态改变时间: 1587922372

 

你可能感兴趣的:(linux,编程)