文件操作(二) & 其他总结

一、 文件操作

1、 获取文件属性

#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>

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

部分常用结构体成员:
    st_mode  : 文件的类型和存取权限
    st_nlink : 文件硬连接数目
    st_uid   : 文件所有者的用户id
    st_gid   : 文件所有者的组id
    st_size  : 文件大小
    st_mtime : 文件最后修改时间
    st_atime : 文件最后访问时间
    st_ctime : 文件最后(文件所有者、所有组、权限)更改时间

    //输出时间时要用ctime()函数将时间转化为字符串输出
    printf("mtime: %s\n", ctime(buf.st_mtime));

    /*判断文件属性*/
    S_ISLNK : 链接文件
    S_ISREG : 一般文件
    S_ISDIR : 目录文件
    S_ISCHR : 字符设备文件
    S_ISBLK : 块设备文件
    S_ISFIFO: FIFO文件
    S_ISSOCK: socket文件

2、 设置文件属性

1) 修改文件权限
#include<sys/types.h>
#include<sys/stat.h>

int chmod(const char *path, mode_t mode);//文件名
int fchmod(int fd, mode_t mode);//文件描述符
2) 修改文件用户id / 组id
#include<sys/types.h>
#include<unistd.h>

int chown(const char *path, uid_t owner, gid_t group);//文件名
int fchown(int fd, uid_t owner, gid_t group);//文件描述符
int chown(const char *path, uid_t owner, gid_t group);//适于链接文件
3) 修改文件大小
#include<sys/types.h>
#include<unistd.h>

int truncate(const char *path, off_t len);//文件名
int ftruncate(int fd, off_t len);//文件描述符
4) 修改文件时间
#include<sys/types.h>
#include<utime.h>
int utime(const char *filename, struct utimbuf *buf);

struct utimbuf{
    time_t actime;//access time
    time_t modtime;//modification time
}

2、 文件移动和删除

1) 文件移动
#include<stdio.h>
int rename(const char *oldname, const char *newname);
2) 文件删除
#include<unistd.h>
int unlink(const char *name);
int remove(const char *name);

//若有进程打开了文件,则文件暂时不被删除,直到所有打开该文件的进程都结束时才被删除
//若name指向socket文件、FIFO文件或设备文件时,该name被删除,但已打开该文件的进程仍然可以使用这些文件

3、目录操作

1) 目录的创建和删除
#include<sys/types.h>
#include<sys/stat.h>
int mkdir(const char *name, mode_t mode);//需设置文件权限
int rmdir(const char *name);//只能删除空目录
2) 获取当前目录
#include<unistd.h>
char * getcwd(char *buf, size_t size);
char getwd(char *buf);
//获得绝对路径
2) 设置工作目录
#include<unistd.h>
int chdir(const char *path);
int fchdir(int fd);

4、获取目录信息

#include<sys/types.h>
#include<dirent.h>
DIR *opendir(const char *name);
struct dirent *readdir(DIR *dir);
int closedir(DIR *dir);

struct dirent{
    long d_ino;
    off_t off;
    unsigned short d_reclen;
    char d_name;//filename
}

二、 其他总结

    1、 磁盘分区分为主分区、扩展分区,而扩展分区有可分为若干逻辑分区,同时规定主分区、扩展分区之和最多为4个(原因:磁盘MBR分配有446字节,而分区表只占用64字节,而每个分区所存信息需要16字节,故最多有4个分区),扩展分区最多只能有1个。

    2、 block为1k的inode可存储最大单一文件的大小为16GB。inode分为12个直接、1间接、1双间接、1三间接:

12个直接指向: 12 * 1K = 12K
间接 :  256 * 1K = 256K
双间接: 256 * 256 * 1K
三间接: 256 * 256 * 256 * 1K
总和:   12K + 256K + 256*256K + 256*256*256K = 16GB

    3、什么是格式化?电子计算机上指用一种系统软件对硬盘或软盘进行处理,使符合数据存储和读取的规定格式。
    为什么要进行格式化?每种操作系统所设置的文件属性、权限不同,为了存放这些文件所需的数据,就需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值