Xv6 檔案系統介面

2021-10-19 17:32:00 字數 1958 閱讀 2594

參考: 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

// ufilesystem.c

// try to use system calls about the file system

#include

"kernel/types.h"

#include

"kernel/stat.h"

#include

"user/user.h"

#include

"kernel/fcntl.h"

void

print_stat

(char

*msg,

struct stat *st)

;int

main()

void

print_stat

(char

*msg,

struct stat *st)

編譯執行:

$ ufilesystem

file: dev=1 ino=30 type=2 nlink=1 size=0 # type 2 就是 file

fiel_link: dev=1 ino=30 type=2 nlink=2 size=0

fd: dev=1 ino=30 type=2 nlink=0 size=0

$ ls dir

. 1 29 64

.. 1 1 1024

在 unlink 檔案達到 nlink==0,並且所有指向檔案的檔案描述符都被釋放之後,檔案才會被刪除。利用這個特性,就有了如下關於臨時檔案的習慣實現:

建立乙個臨時檔案,在關閉檔案描述符或程序退出時刪除:

fd =

open

("/tmp/xyz"

, o_create|o_rdwr)

;unlink

("/tmp/xyz");

// nlink == 0..

.// temp file will be removed when:

close

(fd)

;// or:

exit()

;

eof

# by cdfmlr 2021-02-21

echo "see you. ?"

6 檔案系統

root edaserver1 ls bin boot dev etc home lib lib64 lost found media misc mnt net opt proc root sbin selinux srv sys tftpboot tmp usr var bin所有賬號命令,二進位...

Qt Creator (6) 檔案系統

目錄 檔案操作是應用程式必不可少的部分。qt 作為乙個通用開發庫,提供了跨平台的檔案操作能力。qt 通過qiodevice提供了對 i o 裝置的抽象,這些裝置具有讀寫位元組塊的能力。下面是 i o 裝置的類圖 qiodevice 所有 i o 裝置類的父類,提供了位元組塊讀寫的通用操作以及基本介面...

4 14 檔案系統

為了說明檔案鏈結的概念,先要介紹unix檔案系統的基本結構。同時,了解i節點和指向i節點的目錄項之間的區別也是很有益的。目前,正在使用的unix檔案系統有多種實現。例如,solaris支援多種不同型別的磁碟檔案系統 傳統的基於bsd的unix檔案系統 稱為ufs 讀 寫dos格式軟盤的檔案系統 稱為...