Xv6 文件系统接口
Xv6 文件系统接口
参考: xv6-riscv-book 1.4 File system
文件系统调用
System call | Description |
---|---|
int chdir(char *dir) | 改变当前目录 |
int mkdir(char *dir) | 创建新目录 |
int open(char *file, O_CREATE) | 创建新文件 |
int mknod(char *file, int, int) | 创建新的设备文件(后两个参数是主设备号、次设备号,这两个数在内核中唯一确定一个设备),对设备文件的 read、write 会转发给设备,而不操作文件系统。 |
int link(char *file1, char *file2) | 为 file1 创建新的链接(名字)file2 |
int unlink(char *file) | 移除文件(nlink -= 1),当 nlink == 0 时且无文件描述符指向文件时,文件的磁盘空间被释放 |
int fstat(int fd, struct stat *st) | 把一个打开的文件(fd)的信息放到 st |
int stat(char *file, struct stat *st) | 把指定文件名的文件(file)的信息写入 st |
调用实例
1 | // ufilesystem.c |
编译运行:
1 | $ ufilesystem |
在 unlink 文件达到 nlink==0,并且所有指向文件的文件描述符都被释放之后,文件才会被删除。利用这个特性,就有了如下关于临时文件的习惯实现:
An idiomatic trick
创建一个临时文件,在关闭文件描述符或进程退出时删除:
1 | fd = open("/tmp/xyz", O_CREATE|O_RDWR); |
EOF
1 | # By CDFMLR 2021-02-21 |
顶部图片来自于小歪API,系随机选取的图片,仅用于检测屏幕显示的机械、光电性能,与文章的任何内容及观点无关,也并不代表本人局部或全部同意、支持或者反对其中的任何内容及观点。如有侵权,联系删除。