帶配額檔案系統 C

2021-10-25 15:22:31 字數 2899 閱讀 3184

好吧,調了好久還是沒看出邏輯哪錯了,最後只有60分,果然越複雜的函式出的bug越隱秘 看了其他人的寫法發現也挺簡單的,我用的資料結構複雜了,雖然思路一致,但出錯了很難調

#include

#define max 0x7fffffffffffffff

using

namespace std;

struct node

;enum

;//建立檔案時,生成目錄開始結點

node * start_dir=

null

; node *root=

newnode()

;string ex_path

(string &path)

//路徑解析器 匹配 路徑 /[a-z0-9//]+

string str=path.

substr(1

,i-1);

path=path.

substr

(i,path.

length()

-i);

//解析完後剩餘路徑

return str;

} node *

create_node

(string name,

long

long file_class,

long

long r_size=0,

long

long d_size=0,

long

long ld=max,

long

long lr=max));

return p;

}void

delete_node

(node * cur)

//刪除這個檔案的所有後代,不包括自己

}return;}

bool

create_file

(node * cur,string cmd,

long

long fs,

long

long

&dis)

//返回的是執行該命令後檔案的變化大小

} cur-

>list.

push_back

(create_node

(cmd,fil,fs));

dis=fs;

cur-

>r_size+

=dis;

cur-

>d_size+

=dis;

return

true;}

else

//還需查詢路徑

else

}else}}

//執行到這裡時,說明未找到,需要建立目錄

node *p=

create_node

(name,dir)

;bool re=

create_file

(p,cmd,fs,dis)

;//繼續查詢

if(re)

else}}

bool

c_check_size

(node * cur,string cmd)

//檢查路徑目錄配額

else

//還需查詢路徑 }}

}void

c_restore

(node *cur, string cmd,

long

long

&dis)

//恢復執行之前所有普通檔案,目錄的大小 刪除目錄,普通檔案另寫

}return;}

else

//還需查詢路徑 }}

}bool

remove

(node * cur,string cmd,

long

long

& dis)

else

//如果是dir代表其後代所有大小,如果是普通檔案代表其大小

delete_node

(cur-

>list[i]);

//有後代的話刪除其後代

delete cur-

>list[i]

; vector>

::iterator it=cur-

>list.

begin()

; cur-

>list.

erase

(it+i)

;return

true;}

}return

false

;//找不到該檔案

}else

//還需查詢路徑

else}}

return

false

;//找不到就報錯 }}

bool

set_size

(node * cur,string cmd,

long

long ld,

long

long lr)

} string name=

ex_path

(cmd);if

(name==

"now"

)//到達檔案

else

return

false;}

}return

false

;//找不到該檔案

}else

//還需查詢路徑

}return

false;}

}int

main()

else

else}}

break;}

case

'r':

case

'q':}}

return0;

}

CCF 202012 3 帶配額的檔案系統 練習

大模擬,沒涉及什麼演算法主要是資料結構的設計 細節的考慮,挺鍛鍊的,記錄一下,加了注釋。include include include include include include using namespace std typedef long long ll struct file file ...

檔案系統與LVM 磁碟配額例項

1 為主機增加80g scsi 介面硬碟 2 劃分三個各20g的主分割槽 3 將三個主分割槽轉換為物理卷 pvcreate 掃瞄系統中的物理卷 4 使用兩個物理卷建立捲組,名字為myvg,檢視捲組大小 5 建立邏輯卷mylv,大小為30g 6 將邏輯卷格式化成xfs檔案系統,並掛載到 data目錄上...

給檔案系統加密 磁碟陣列 配額 lvm的建立

給檔案系統加密 先劃分出乙個硬碟區域vdb1 cryptsetup luksformat dev vdb1 are you sure?type uppercase yes yes 大寫的yes 然後輸入密碼 dev vdb1掛載mount就可以使用 掛載注意 先開啟密碼層 cryptsetup op...