在ext2文件系統中創建文件的過程如何?Ext2 - 如何創建文件
我想做一個簡單的系統調用,它需要一個路徑並創建給定的文件 - 如觸摸。
例如,代碼:
int main(void)
{
syscall(MY_SYSCALL_NUMBER, "/tmp/file");
}
應該創建一個在/ tmp中名爲 「文件」 的文件。
現在系統調用本身應該如何工作?
我的工作至今(我中省略錯誤在這裏檢查可讀性):
asmlinkage long sys_ccp(const char __user *arg)
{
struct path path;
struct inode *new_inode;
struct qstring qname;
//ommited copy from user for simplicity
qname.name = arg;
qname.len = length(arg);
kern_path(src, LOOKUP_FOLLOW, &path);
new_inode = ext2_new_inode(path.dentry->d_parent->d_inode, S_IFREG, &qname);
}
這似乎是工作(我可以在一個inode分配日誌中看到),但是,當我打電話ls
上目錄我看不到那裏的文件。
我的想法是新的索引節點添加到目錄的struct dentry
,所以我加了這段代碼:
struct dentry *new_dentry;
new_dentry = d_alloc(path.dentry->d_parent, &qname);
d_instantiate(new_dentry, new_inode);
然而,這似乎仍然沒有工作(我無法看到使用ls
文件)。
如何正確實現這個系統調用,我錯過了什麼?
編輯: 關於R ..答案 - 這個系統調用的purpuse是玩弄ext2並瞭解它的設計,所以我們可以假設路徑總是有效的,文件系統確實是ext2等等。
如果您沒有回答或問題已關閉,請不要重新發布問題!相反,如果它現在符合網站規則,請修改原件並要求重新打開。見[問]。 – Olaf
添加Linux系統調用不是「玩弄ext2並學習其設計」的方法。如果你想這樣做,寫一個獨立的實用程序,可以處理ext2文件系統(作爲圖像文件或直接訪問塊設備)。你似乎試圖做的是*在內核*上執行ext2 fs的內核內部編程接口,這與內核vfs層的工作方式有關,而不是ext2如何工作。這不是一個有用的練習。 –