码迷,mamicode.com
首页 > 其他好文 > 详细

文件空洞

时间:2021-06-10 17:57:11      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:following   pre   习题   nan   文件的   gid   user   ioc   define   

做《TLPI》第四章的最后习题的时候,体会到内容。

常规的I/O操作有open(),read(),write(),close()还有比较特殊的lseek(),ioctl()。

linux在读写一个文件的时候都会通过一个 “文件偏移量”来确定在哪个位置读写,英文是offset,

而lseek()则可以控制这个offset的值,来达到操控文件读写初始位置的目的。

 

而如果将offset设置得足够大,即超过了储存的文本长度,再对文件进行写入(write)也是合理的。那么常规文本末尾和offset后填入的第一个字符之间的空隙则为空,成为文件空洞。

这种含有文件空洞得文件我们一般叫做稀疏文件。稀疏文件一般用在需要提前占好磁盘空间的情况,比如虚拟机分配磁盘大小,下载文件的时候提前站好空间,文件空洞则之后在进行填充。

 

int stat(const char *pathname, struct stat *statbuf);这个函数可以获取文件的各种信息,(一定要熟用man这个指令啊)

struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* Inode number */
mode_t st_mode; /* File type and mode */
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; /* Block size 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
};

文件空洞

标签:following   pre   习题   nan   文件的   gid   user   ioc   define   

原文地址:https://www.cnblogs.com/easterncabbage/p/14868873.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!