繁体   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