UNIX C 檔案許可權 Part2 day01

2022-04-03 02:42:35 字數 3863 閱讀 4197

1.檔案訪問測試

測試呼叫程序對指定檔案是否擁有足夠的訪問許可權

#include int access(const

char* pathname,int

mode);

成功返回0,失敗返回 -1

-pathname:檔案路徑

-mode:訪問許可權,可取以下值

r_ok -可讀否

w_ok -可寫否

x_ok -可執行否

f_ok - 存在否

2.許可權掩碼: 

設定呼叫程序的許可權掩碼: 

#include mode_t umask(mode_t cmask);

函式永遠成功,返回原來的許可權掩碼

-cmask :新許可權掩碼

預設掩碼(

0022);

3.修改檔案許可權

修改指定檔案的許可權:

#include int chmod(const

char*path,mode_t mode);

int fchmod(int

fd,mode_t mode);

成功返回0,失敗返回-1

-path :檔案路徑

-mode:檔案許可權

-fd:檔案描述符

4.修改檔案大小

指定檔案的大小:

#include int truncate(const

char*path,off_t length);

int ftruncate(int

fd,off_t length);

成功返回0,失敗返回-1

-path:檔案路徑

-length:檔案大小

-fd:檔案描述符

5.記憶體對映檔案

建立虛擬記憶體到物理記憶體或檔案的對映

#include void* mmap(void* start,size_t length,int

prot,

int flags,int

fd,off_t offset);

成功返回對映區記憶體起始位址,失敗返回map_failed(-1

)-start:對映區記憶體起始位址,null系統自動選定後返回

-length:對映區位元組長度,自動按頁(4k)園整

-prot:對映區訪問許可權,可以取以下值

prot_read -對映區可讀

prot_write -對映區可寫

prot_exec -對映區可執行

prot_none -對映區不可訪問

-flags:對映標誌,可取下值

map_anonymous -匿名對映,將虛擬記憶體對映到物理記憶體而非檔案,忽略fd和offset引數

map_private -對對映區的寫操作只反映到緩衝區中,並不會真正寫入檔案

map_shared -對對映區的寫操作直接反映到檔案中

map_denywrite -拒絕其他對檔案的寫操作

map_fixed -若在start上無法建立對映,則失敗(無此標誌系統會自動調整)

map_locked -鎖定對映區,保證其不被換出

-offset:檔案偏移量

6.解除虛擬記憶體到物理記憶體或檔案的對映

#include int munmap(void*start,size_t length);

成功返回0,失敗-1

-start: 對映區記憶體起始位址,必須是頁的首位址

-length:對映區位元組長度,自動按頁(4k)園整

7.檔案硬鏈結

建立乙個已有硬鏈結建立乙個新的硬鏈結

#include int link(const

char* oldpath,const

char*newpath);

-oldpath:原始路徑

-newpath:新建路徑

刪除目錄檔案裡的乙個硬鏈結條目

#include int unlink(const

char*pathname);

int remove(const char* pathname);

成功返回0,失敗-1

修改檔案的名字:

#include int rename(const

char* oldpath,const

char*newpath);

成功返回0,失敗-1

8.符號鏈結

#include int symlink(const

char* oldpath,const

char*newpath);

成功 0,失敗-1

ssize_t readlink(

const

char* path,char*buf,size_t size);

成功返回拷入buf的符號鏈結檔案的內容的位元組數,失敗返回-1

9.目錄的建立

建立空目錄

#include int mkdir(const

char*pathname,mode_t mode);

成功返回0,失敗-1

--pathname:目錄路徑

--mode:訪問許可權,目錄的執行許可權(x)表示可進入

刪除乙個空目錄

#include int rmdir(const

char*pathname);

成功0,失敗-1

-pathname:目錄路徑

10.當前工作目錄

獲取當前工作目錄  

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

成功返回當前工作目錄路徑字串指標,失敗返回null

-buf:緩衝區

-size:緩衝區大小(位元組)

切換當前工作目錄

#include int chdir(const

char*pathname);

int fchdir(int

fd);

-path:工作目錄路徑

-fd:目錄工作目錄檔案描述符(由open函式返回)

11.獲取目錄內容

開啟目錄

#include dir* opendir(const

char*name);

dir* fdopedir(int

fd);

成功返回目錄流指標,失敗返回null

-name:目錄路徑

-fd:目錄檔案描述符(由open函式返回)

關閉目錄

#include int closedir(dir*dirp);

成功返回0,失敗-1

-dirp:目錄流指標

讀取目錄

#include struct dirent* readdir(dir*dirp);

成功返回目錄條目指標,讀完(不置errno)或失敗返回null

目錄條目結構:

struct

dirent;

--每個目錄中還有兩個特殊的條目,其d_name成員的值為「.」,「..」,分別表示該目錄本身和其父目錄,更目錄無父目錄

其中表示檔案型別的d_type成員,可取以下值

dt_reg -普通檔案

dt_dir -目錄

dt_sock -本地套節字

dt_chr -字元裝置

dt_blk -塊裝置

dt_lnk 符號鏈結

dt_fifo 有名管道

dt_unknown 未知

c 檔案分割與合併 part 2

同樣,引用system.io,然後,給瀏覽按鈕新增如下 瀏覽 private void button1 click object sender,eventargs e string path openfiledialog1.filename.split tochararray string stem...

c 檔案分割與合併 part 2

同樣,引用system.io,然後,給瀏覽按鈕新增如下 瀏覽 private void button1 click object sender,eventargs e string path openfiledialog1.filename.split tochararray string stem...

檔案許可權之預設許可權與隱藏許可權2

檔案的預設許可權 umask umask 0022 後面三個是一般許可權 umask s u rwx,g rx,o rx 目錄的預設許可權 1.檔案預設不給執行 x 許可權,最大666 rw rw rw 2.目錄預設給x許可權,最大777 rwxrwxrwx 3.uamsk分數值指的是,該預設值需要...