好吧,調了好久還是沒看出邏輯哪錯了,最後只有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...