Linux下st_blksize与Windows下簇大小的对应

这篇博客探讨了Linux的st_blksize属性与Windows下簇大小的关系,指出Linux最小存储单位是"块",而Windows是"簇"。通过GetDiskFreeSpace函数可以获取Windows磁盘簇的详细信息,并提供了测试示例来计算簇的字节数和磁盘空间。
摘要由CSDN通过智能技术生成

声明:此调查结果如有错误,敬请指正。谢谢^_^

 

Linux下文件对应的属性

struct stat {

        mode_t     st_mode;        //文件对应的模式,文件、目录等
        ino_t         st_ino;            //inode节点号
        dev_t        st_dev;           //设备号码
        dev_t        st_rdev;          //特殊设备号码
        nlink_t       st_nlink;         //文件的连接数
        uid_t         st_uid;            //文件所有者
        gid_t         st_gid;            //文件所有者对应的组
        off_t          st_size;          //普通文件对应的文件字节数
        time_t       st_atime;        //文件最后被访问的时间
        time_t       st_mtime;       //文件内容最后被修改的时间
        time_t       st_ctime;        //文件状态改变时间
        blksize_t   st_blksize;     //文件内容对应原块大小
        blkcnt_t     st_blocks;      //文件内容对应的块数量

   

}

 

Windows下对应于上述st_blksize的值为“一个簇的大小 = 一个簇的扇区数 * 一个扇区的字节数”。

 

Windows下,如果用GetDiskFreeSpace函数来取得磁盘信息</

Linux下,可以使用C语言编程实现stat函数的功能。 stat函数用于获取文件的属性信息,包括文件类型、文件大小、创建时间、最后修改时间等。它的定义如下: ```c #include <sys/stat.h> int stat(const char *path, struct stat *buf); ``` 其中,path是要获取属性信息的文件路径,buf是用于存储属性信息的结构体指针。 在调用stat函数之前,需要先定义一个结构体,用于存储属性信息。结构体的定义如下: ```c struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device ID (if special file) */ off_t st_size; /* total size, in bytes */ blksize_t st_blksize; /* blocksize for file system I/O */ blkcnt_t st_blocks; /* number of 512B blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last status change */ }; ``` 其中,各个字段的含义如下: - st_dev:文件所在设备的ID。 - st_ino:文件的inode号。 - st_mode:文件的保护模式。 - st_nlink:文件的硬链接数。 - st_uid:文件所有者的用户ID。 - st_gid:文件所有者的组ID。 - st_rdev:如果文件是特殊文件,这里是设备ID。 - st_size:文件大小。 - st_blksize:文件系统I/O的块大小。 - st_blocks:512字节块的数量。 - st_atime:最后访问时间。 - st_mtime:最后修改时间。 - st_ctime:最后状态改变时间。 下面是一个示例程序,用于获取文件的属性信息并输出到屏幕上: ```c #include <stdio.h> #include <sys/stat.h> int main() { struct stat buf; int ret = stat("test.txt", &buf); if (ret == -1) { perror("stat"); return -1; } printf("File type: "); switch (buf.st_mode & S_IFMT) { case S_IFBLK: printf("block device\n"); break; case S_IFCHR: printf("character device\n"); break; case S_IFDIR: printf("directory\n"); break; case S_IFIFO: printf("FIFO/pipe\n"); break; case S_IFLNK: printf("symlink\n"); break; case S_IFREG: printf("regular file\n"); break; case S_IFSOCK: printf("socket\n"); break; default: printf("unknown?\n"); break; } printf("File size: %ld bytes\n", buf.st_size); printf("Number of blocks: %ld\n", buf.st_blocks); printf("Last status change time: %s", ctime(&buf.st_ctime)); printf("Last file access time: %s", ctime(&buf.st_atime)); printf("Last file modification time: %s", ctime(&buf.st_mtime)); return 0; } ``` 在这个示例程序中,我们使用了stat函数获取了test.txt文件的属性信息,并将这些信息输出到屏幕上。请注意,我们使用了ctime函数将时间戳转换为可读的时间格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值