簡體   English   中英

解析通用內核擴展中的文件

[英]Parsing files in generic kernel extensions

Xcode的通用Kernel Extension需要文件解析。

例如,我想讀取A.txt文件的內容並將其另存為變量。 就像您在c中使用FILE,fopen,EOF

如您所見,通用內核擴展不能包含stdio.h,從而導致使用未聲明標識符的錯誤。

我想知道是否有一種方法可以解析通用內核擴展(如c)中的文件。 (以下代碼可在內核擴展中使用)

FILE *f;
char c;
int index = 0;
f = fopen(filepath, "rt");
while((c = fgetc(f)) != EOF){
    fileContent[index] = c;
    index++;
}
fileContent[index] = '\0';

當然有可能 您需要執行以下操作:

  1. 使用vnode_open()打開文件。 這會將您的路徑轉換為vnode_t參考。 您將需要一個VFS授權上下文。 您可以通過vfs_context_create()獲得當前線程的上下文(即,以當前正在其內核運行的進程上下文中的用戶身份打開文件) vfs_context_create()如果您還沒有vfs_context_create()
  2. 使用vn_rdwr()執行I / O。 (讀寫使用相同的功能,只需將UIO_READUIO_WRITE作為第二個參數傳遞。)
  3. 關閉文件,並使用vnode_close()刪除對vnode的引用。 可能使用vfs_context_rele()處理創建的VFS上下文。

您將需要查看所有這些函數的headerdocs,它們在<sys/vnode.h>中定義,並且解釋每個參數都超出了SO問題/答案的范圍。

注意:但是,正如評論員所指出的那樣,您需要確保打開文件確實是解決問題的必要條件,尤其是在您不熟悉內核編程的情況下。 如果完全不確定,我建議您按照“我正在嘗試X,以kext讀取文件確實是最好的方法嗎?”這樣的標題發布問題。 其中X足夠高,不是“我需要內核中文件的內容”,而是為什么 ,為什么要專門指定文件

在各種內核執行上下文中,文件I / O可能並不安全(即有時可能會掛起系統)。 如果您的kext在引導期間過早加載,則可能還沒有文件系統。 文件I / O會導致系統中發生很多事情,並且以內核術語可能會花費很長的時間-特別是如果您考慮使用網絡文件系統(包括netboot環境!)。 如果您不小心,如果用戶試圖彈出包含您的kext已打開文件的卷,可能會導致糟糕的用戶體驗:用戶無法解決此問題,操作系統只能建議關閉特定應用,它無法深入您的kext。 另外,通常會有關於內核編程的通常警告:僅僅因為它可以在內核中完成,並不意味着應該這樣做。 情況恰恰相反: 只有在無法以其他任何方式完成時,才應該在kext中完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM