文件及目錄

1.文件系統

文件權限:

  • 特色 :
      1. 目錄:
      • 讀權限: 讀取目錄中的文件名列表。只有讀權限,只能獲取文件名列表,不能獲取文件其它信息。
      • 寫權限: 在目錄中添加、修改、刪除文件或目錄。
      • 執行權限: 對目錄有操做權限,相似於進入目錄的權限
      • 執行權限和讀、寫權限:先有進入目錄的權限,而後才能讀、操做

文件長度:

  • 普通文件、目錄文件、符號鏈接以字節爲長度,其中符號鏈接是文件名的字節數。

文件系統

輸入圖片說明

  • 自舉塊:引導程序。node

  • 超級塊: 記錄整個文件系統相關的信息的地方,它記錄的信息主要有:block與inode的總量、使用量、剩餘量,文件系統的掛載時間,最近一次寫入數據的時間等。網絡

  • i節點圖:標記那些inode 是否爲已使用socket

  • 塊位圖:標記那些block 是否爲已使用測試

  • i節點(表):i節點存放文件有關的全部信息:文件類型、文件訪問權限位、文件長度和指向文件數據塊的指針、文件名、i節點編號.ui

  • 數據塊:存放文件內容。操作系統

  • 特色 :unix

    • unix系統以inode號來操做系統。inode號對應的數據存了文件名、權限、增改查時etc指針

    • 文件名只是方便人類操做,整數操做比字符快rest

  • 操做code

    • 訪問 /etc/passwd 文件:

      • 先經過 / 的inode號獲取 / 信息。經過權限驗證後,從對應的block中訪問 文件名列表,找到 /etc

      • 先經過 /etc 的inode號獲取 /etc 信息。經過權限驗證後,從對應的block中訪問 文件名列表,找到 /etc/passwd

      • 先經過 /etc/passwd 的inode號獲取 /etc/passwd 信息。經過權限驗證後,從對應的block中獲得文件信息

    • 修改文件名:直接替換inode中的文件名信息

    • 同一個文件系統中移動文件。建立一個新的inode節點,將舊的inode節點刪除。

2.操做方法

方法名 做用 成功 失敗
stat 返回文件信息 0 -1
access和faccessat 返回文件訪問權限 0 -1
umask 屏蔽進程的文件模式的權限 返回以前的文件模式建立的屏蔽字
chmode、fchmode、fchmodat 變動文件的權限 0 -1
link、linkat 建立鏈接 0 -1
unlink、unlinkat 刪除一個文件鏈接。若是鏈接爲0,則文件刪除 0 -1
remove 刪除一個文件鏈接。若是鏈接爲0,則文件刪除 0 -1
rename、renameat 重命名 0 -1
symlink、symlinkat 建立符號連接 0 -1
readlink、readlinkat 讀取符號連接 0 -1
futimens、utimensat 和 utimes 修改文件時間 0 -1
mkdir、mkdirat 建立目錄 0 -1
rmdir 刪除目錄 0 -1
chdir、fchdir 打開工做目錄 0 -1
getcwd 打開工做目錄 0 NULL

stat、fstat、fstatat、lstat 返回pathname的信息

#include <sys/stat.h>

inct stat(const char *restrict pathname,struct stat *restrict buf);

int fstat(int fd,struct stat *buf);

int lstat(const char *restrict pathname, struct stat *restrict buf);

int fstat(int fd, const char *restrict pathname, struct stat restrict buf, int flag);
    --'成功:0;出錯:-1'
  • 參數:

    • stat 結構
    struct stat {
        mode_t              st_mode;        '文件類型'
        ino_t               st_ino;         'i-node 數數量'
        dev_t               st_dev;         'device 數量'
        dev_t               st_rdev;        '特殊文件的 device 數量'
        nlink_t             st_nlink;       'link文件的數量'
        uid_t               st_uid;         'user ID'
        gid_t               st_gid;         'group ID'
        off_t               st_size;        '普通文件的字節大小'
        struct timespec     st_atime;       '最近被訪問時間'
        struct timespec     st_mtime;       '最近被修改時間'
        struct timespec     st_ctime;       '被建立時間'
        blksize_t           st_blksize;     'I/O 的塊大小'
        blkcnt_t            st_blocks;      '磁盤分配的塊大小'
    }
    • 文件類型

      • 普通文件(regular file):經常使用文件類型
      • 目錄文件(directory file):包涵了其它文件的名字及指向與這些文件有關信息的指針。
      • 塊特殊文件 (block special file):提供設備(如磁盤)帶緩衝的訪問,每次訪問以固定長度爲單位進行。
      • 字符特殊文件 (character special file):提供設備不帶緩衝的訪問。
      • FIFO:用於進程間通訊。
      • 套接字(socket):用於進程間的網絡通訊。
      • 符號連接(symbolic link):指向另一個文件。
    • st_mode 的類型 # include<sys/stat.h>

說明
文件類
S_ISREG() 不一樣文件
S_ISDIR() 目錄文件
S_ISCHR() 字符特殊文件
S_ISBLK() 塊特殊文件
S_ISFIFO() 管道或FIFO
S_ISLNK() 符號連接
S_ISSOCK() 套接字
IPC類
S_TYPEISMQ() 消息隊列
S_TYPEISSEM() 信號量
S_TYPEISSHM() 共享存儲對象
  • 特色:返回與pathname 有關的新消息結構

access和faccessat 訪問權限

#include <unistd.h>

int access(const char *pathname, int mode); '絕對路徑'

int faccessat(int fd, const char *pathname, int mode ,int flag); '相對fd的路徑'

        -- '成功:0;出錯:-1'
  • 參數

    • mode :
mode 說明
R_OK 測試讀權限
W_OK 測試寫權限
X_OK 測試執行權限

umask : 屏蔽進程的文件模式的權限

#incLude <sys/stat.h>

mode_t umask(mode_t cmask);
 
  --- '返回以前的文件模式建立的屏蔽字'

chmode、fchmode、fchmodat : 變動文件的權限

#include <sys/stat.h>

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

int fchmod(int fd, mode_t mode);

int fchmodat(int fd, const char *pathname, mode_t mode, int flag);

        --- '成功:0;失敗-1'
  • 參數

    • mode :
mode 說明
S_ISUID 執行時設置用戶ID
S_ISGID 執行時設置組ID
S_ISXID 保存正文(粘着位)
S_IRWXU 用戶(全部者)讀、寫和執行
S_IRUSR 用戶(全部者)讀
S_IWUSR 用戶(全部者)寫
S_IXUSR 用戶(全部者)執行
S_IRWXG 組讀、寫和執行
S_IRGRP 組讀
S_IWGRP 組寫
S_IXGRP 組執行
S_IRWXO 其它讀、寫和執行
S_IROTH 其它讀
S_IWOTH 其它寫
S_IXOTH 其它執行

link、linkat、ulink、unlink、unlinkat、remove : 鏈接操做

#incldue <unistd.h>

' 建立鏈接'
int link(const char *existingpath , const char *newpath) ;

int linkat(int efd, const char *existingpath, int nfd, const char *newpath , int flag );
    
        -- '成功:0;出錯:-1'

'刪除一個鏈接'

int unlink(const char *pathname);

int unlinkat(int fd , const char *pathname ,int flag);

        -- '成功:0;失敗:-1'
        
'刪除'
#include <stdio.h>

int remove(const char *pathname); '成功:0;失敗:-1'

rename、renameat : 重命名

#incldue <unistd.h>


int rename(const char *oldname , const char *newname) ;

int renameat(int oldfd , const char *oldname, int newfd, const char *newname);
    
        -- '成功:0;出錯:-1'

symlink、symlinkat : 建立符號連接

#incldue <unistd.h>


int symlink(const char *oldname , const char *newname) ;

int symlinkat(int oldfd , const char *oldname, int newfd, const char *newname);
    
        -- '成功:0;出錯:-1'

readlink、readlinkat : 讀取符號連接

#incldue <unistd.h>


ssize_t readlink(const char *restrict pathname , char *restrict buf , size_t bufsize ) ;

ssize_t readlinkat(int fd , const char *restrict pathname , char *restrcit buf newfd, size_t bufsize  );
    
        -- '成功:返回讀取的字節數;出錯:-1'

futimens、utimensat 和 utimes: 修改文件時間

#incldue <sys/stat.h>


ssize_t futimens(int fd , const struct timespec  time[2] ) ;

ssize_t utimensat(int fd ,const char *path , const struct timespec  time[2] ,int flag ) ;
    
        -- '成功:0;出錯:-1'

#include <sys/time.h>

int utimes(const char *pathname, const struct timeval time[2]);
        
        -- '成功:0;出錯:-1'

mkdir、mkdirat : 建立目錄

#incldue <sys/stat.h>

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

int mkdirat(int fd , const char *pathname,mode_t mode);
        
        -- '成功:0;出錯:-1'

rmdir : 刪除目錄

#incldue <sys/stat.h>

int rmdir(const char *pathname,mode_t mode);
        
        -- '成功:0;出錯:-1'

讀目錄

#incldue <dirent.h>


DIR *opendir(const char *pahtname);

DIR *fopendir(int fd);

        -- '成功:返回指針;出錯:NULL' 
        
struct dirent *readdir(DIR *dp);

        -- '成功:返回指針;若在目錄尾或出錯:NULL' 
        
void rewinddir(DIR  *dp);

void closedir(DIR  *dp);

        -- '成功:0;出錯:-1' 
        
long telldir(DIR  *dp);

        -- '返回:與dp關聯的目錄中的當前位置' 
                
void seekdir(DIR  *dp , long ioc);

        -- '成功:0;出錯:-1'

chdir、fchdir、getcwd: 打開工做目錄

#incldue <unistd.h>


int *chdir(const char *pahtname);

int fchdir(int fd);

        -- '成功:0;出錯:-1' 

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


        -- '成功:返回buf;出錯:NULL'
相關文章
相關標籤/搜索