UC学习day07 获取文件元数据 文件夹操作 库函数和系统调用函数的关系 文件夹的杂项

一 获取文件的元数据
文件有两部分内容构成. 文件的数据 文件的属性信息
什么是文件的元数据?属性信息就是文件的元数据
文件的数据和元数据在操作系统中是如何布局的.
每个文件都有唯一的一个inode和其对应.在inode中分为两部分,一部分保留了文件的数据,一部分保留了文件的元数据.

day07$ls -li
总用量 0
410493 -rw-rw-r-- 1 tarena tarena 0 Mar 29 09:03 笔记

链接文件
软链接 硬链接

可以使用系统调用 stat(2)获取文件的元数据
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *pathname, struct stat *buf);
功能:获取指定文件的元数据
参数:
pathname:指定了文件的名字,就是获取这个文件的元数据
buf:将文件的元数据存储到buf指定的地址空间里
返回值:
成功 0
错误 -1 errno被设置为合适的值

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 filesystem I/O */
blkcnt_t st_blocks;/*number of 512B blocks allocated /
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
};

如何根据uid获取用户的名字?
用户的信息存储在哪里?
/etc/passwd文件中存放着用户的基本信息
root❌0:0:root:/root:/bin/bash
tarena❌1000:1000:ubuntu,:/home/tarena:/bin/bash
冒号分割的多个域 7个
1 用户的名字
2 用户是否有密码
3 用户的id
4 用户初始组的id
5 备注说明
6 用户的家目录
7 用户登录以后执行的第一个程序
getpwuid(3)
struct passwd *getpwuid(uid_t uid);

struct passwd {
char pw_name; / username */
char pw_passwd; / user password /
uid_t pw_uid; /
user ID /
gid_t pw_gid; /
group ID */
char pw_gecos; / user information */
char pw_dir; / home directory */
char pw_shell; / shell program */
};

如何根据gid获取用户组的名字?
用户组的信息存储在哪里?
/etc/group文件中

tarena❌1000:
adm❌4:syslog,tarena
冒号分割的多个域 4个域

1 用户组的名字
2 用户组密码
3 用户组id
4 用户组的成员
getgrgid(3)

#include <sys/types.h>
#include <grp.h>
struct group *getgrgid(gid_t gid);

struct group {
char gr_name; / group name */
char gr_passwd; / group password /
gid_t gr_gid; /
group ID */
char *gr_mem; / NULL-terminated array of pointers
to names of group members */
};

文件的类型和权限
st_mode&0170000
040000
0170000
0100000000000000
1111000000000000
0100000000000000

100664
00700
000700
110
111
110
100
100

二 文件夹的操作
drwxrwxr-x 2 tarena tarena 4096 Mar 29 15:05 tt
r w x
什么是文件夹的内容?
文件夹的内容是文件夹里的文件.

文件夹怎么执行?不执行x又代表什么?
文件夹不能执行.x代表可通过.

如何在程序中对文件夹进行操作?
opendir(3) closedir(3) readdir(3)

#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
功能:打开一个文件夹
参数:
name:指定了要打开的文件夹的名字
返回值:
成功 文件夹流的地址
失败 NULL errno被设置为相应的错误码

#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
功能:关闭文件夹
参数:
dirp:指定要关闭的文件夹流
返回值:
成功 0
错误 -1 errno被设置为相应错误码

举例说明 打开和关闭一个文件夹 文件夹的名字通过命令行传递.
代码参见 dir.c

readdir(3)
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
功能:从指定的文件夹流中获取一条记录
参数:
dirp:指定了要操作的文件夹流
返回值:
NULL 代表到达了文件夹的末尾或者发生了函数调用错误.
如果是函数调用错误,errno被设置为相应的错误编码
返回一个地址,指向struct dirent的地址

struct dirent{
ino_t d_ino; /* inode number /
off_t d_off; /
not an offset; see NOTES /
unsigned short d_reclen;
/
length of this record /
unsigned char d_type;
/
type of file; not supported
by all filesystem types /
char d_name[256]; /
filename */
};

三 库函数和系统调用之间的关系
库函数 fopen(3) fclose(3) fgetc(3) fputc(3)
系统调用 open(2) close(2) read(2) write(2)

实例代码参见 file.c
缓冲文件
非缓冲文件
库函数对文件的操作效率会高一些
库函数可以跨系统 跨平台
系统调用是不可以跨平台的

四 文件操作的杂项
access(2)
getcwd(3)
dirname(3)
basename(3)
chdir(2)
mkdir(2)
rmdir(2)
umask(2)
unlink(2)
link(2)
rename(2)
remove(3)
chmod(2)

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值