一、檔案系統
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鍊錶...