linux sys 檔案系統

2021-08-09 07:20:40 字數 3660 閱讀 8842

一、檔案系統

1.window檔案系統 ntfs    u盤 fat32

linux檔案系統 ext2、ext3、ext4

stat裡面的時間辨析

atime(最近訪問時間):

mtime(最近更改時間):指最近修改檔案內容的時間。

ctime(最近改動時間):指最近改動inode的時間。

3.access檢查乙個檔案是否有訪問許可權

#include

int access(const char *pathname, int mode);

r_ok 是否有讀許可權

w_ok 是否有寫許可權

x_ok 是否有執行許可權

f_ok 檔案是否存在

4.chmod

#include

int chmod(const char *path, mode_t mode);

int fchomod(int fd, mode_t mode); 

5. chown

#include

int chown(const char *path, uid_t owner, gid_t group);

int fchown(int fd, uid_t owner, gid_t group);

int lchown(const char *path, uid_t owner, gid_t group);

##utime

##truncate

## link

建立乙個硬鏈結

當rm刪除檔案時,只是刪除了目錄下的記錄項和把inode硬鏈結計數減1,當硬鏈結計數減為0時,才會真正刪除檔案

#include

int link(const char *oldpath, const char *newpath);

1.硬鏈結通常要求位於同一檔案系統中,posix允許跨檔案系統

2.符號鏈結沒有檔案系統限制

3.通常不允許建立目錄的硬鏈結,某些unix系統下超級使用者可以建立目錄的硬鏈結

4.建立目錄項以及增加硬鏈結計數應當是乙個原子操作

int syslink(const char *oldpath, const char *newpath);

ssize_t readlink(const char *path, char *buf, size_t bufsiz);

int unlink(const char *pathname)

##rename

檔案重新命名

#include

int rename(const char *oldpath, const char *newpath);

##chdir

改變當前程序的工作目錄

#include

int chdir(const char *path);

int fchdir(int fd);

##getcwd

獲取當前工作目錄

#include

char *getcwd(char *buf, size_t size);

char *getwd(char *buf);    //基本不用了  不安全  容易溢位

char *get_current_dir_name(void);//基本不用了不安全

##pathconf

獲取系統檔名可以定義的最大檔名、io緩衝區多大等系統的資源限制值

#include

long fpathconf(int fd, int name);

long pathconf(char *path, int name);

二、目錄操作

1. mkdir

#include

#include

int mkdir(const char *pathname, mode_t mode);

2.rmdir

#include

int rmdir(const char *pathname);

3.opendir

#include

#include

dir *opendir(const char *name);

dir *fdopendir(int fd);

4.readdir

readdir每次返回一條記錄項,dir*指標指向嚇一跳記錄項

#include

struct dirent *readdir(dir *dirp);

struct dirent ;

5.rewinddir

把目錄指標恢復到初始位置

#include

#include

void rewinddir(dir *dirp);

##seekdir//不太常用

##telldir//不太常用

6.closedir

#include

#include

int closedir(dir *dirp);

遞迴遍歷目錄的實現:

/* 歸遍歷目錄的實現 */

#include #include #include #include #include #include #define max_path 1024

void dirwalk(char *dir, void(*fcn)(char *))

while((dp = readdir(dfd)) != null)

}closedir(dfd);

}/* fsize: print the size and name of file "name" */

void fsize(char *name)

if((stbuf.st_mode & s_ifmt) == s_ifdir)

dirwalk(name,fsize);

printf("%8ld %s\n",stbuf.st_size, name);

}int main(int argc, char **argv)

##虛擬檔案系統 vfs

dup、dup2  實現多個檔案描述符指向乙個file結構體

linux sys檔案的建立

1 sys 檔案的建立 1.1 定義 show 和 store函式,這兩個函式對應對sys檔案的讀寫,show對應read store對應write 函式的型別如下 ssize t show struct device d,struct device attribute attr,char buf ...

檔案系統 why檔案系統

為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...

檔案系統 檔案系統的架構

vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...