linux文件 st_ino,Linux文件和目录

Linux文件和目录

文件的组成:数据块 和 inode(文件类型,属主关系,访问权限,时间戳)

inode: 存放再 struct stat 中

函数;  int stat(const char* pathname, struct stat* buf)  //获取inode通过文件名称

int fstat(int fd, struct stat* buf)               //获取inode通过文件描述字

int lstat(const char* pathname, struct stat* buf) //类似stat, 当文件类型为软连接时,返回软连接本身的inode,所以要监测各种不同的文件类型,这个比较可靠

struct stat:

mode_t st_mode 文件类型和访问权限

ino_t st_ino 文件inode号

nlink_t st_nlink 文件硬连接的数目

uid_t st_uid             gid_t st_gid

off_t st_size //文件大小

。。。

测试文件类型:

宏:S_ISREG(mode_t) S_ISDIR(mode_t) S_ISLNK(mode_t) S_ISSOCK(mode_t) S_ISCHR(mode_t) S_ISBLK(mode_t) S_ISFIFO(mode_t)

读取文件大小,将文件放入内存

int fd = open(filename, O_RDONLY, 0);

struct stat* statbuf;

stat(filename, statbuf);

char* buf  = new char[statbuf.st_size+1];

read(fd, buf, statbuf.st_size);

buf[statbuf.st_size] = 0;

close(fd);

...

目录文件:

表现为一张目录登记表(inode号 和 文件名)

123   ..

232   dir

465   fileb               //都是文件的硬链接

465  fileb_2          //都是文件的硬连接

改变文件用户id和组id

chown(const char* pathname, uid_t uid, gid_t gid)  fchown lchown

改变文件访问权限:

chmod(const char* pathname, mode_t mode) fchmod

access函数:

access(const char* pathname, R_OK | W_OK |X_OK | F_OK)测试当前的实际用户,对该文件的访问权限,成功0 否则-1

文件大小:

对普通文件和符号链接文件才有意义(链接的大小是所指向的文件名的长度)

st_blocks(文件占用磁盘块数) * st_blksize(磁盘块大小) = size文件实际的存储空间大小

当 size 远远小于 st_size的时候,说明该文件是一个稀疏文件(文件有许多null组成,但是磁盘不存储他们)例如,fseek到文件尾后一段距离,就产生了一段空洞,该文件就是稀疏文件!但是如果拷贝该文件,null字符也将存储在磁盘中(系统无法知道一个文件是否是稀疏文件)

获取工作目录:

char* getwd(char* buf);  char* getcwd(char* buf, int size); //获取当前的工作目录

int chdir(const char* pathname)  int fchdir(int fd) //设置当前工作目录

创建目录: int mkdir(const char* pathname, mode_t mode);

读取目录流:

struct DIR          //目录登记表

struct dirent       //目录登记项

example:

DIR* dir = opendir(dirname);

dirent* item;

while((item = readdir(dir)) != 0) {

item->d_ino      //文件inode号

item->d_name     //文件名称

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值