gpt4 book ai didi

c - 如何使用 dentry_path_raw()

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:33 27 4
gpt4 key购买 nike

我正在为 Linux 编写一个内核模块,其目的是从 dentry 结构派生绝对路径。我知道函数 char *dentry_path_raw(struct dentry *dentry, char *buf, int buflen) 可用于从 dentry 结构中检索绝对路径。我的问题是我不知道如何使用它。

缓冲区应该是存储路径的地方,但它需要缓冲区的长度。在没有完整路径的情况下,我怎么知道长度应该是多少?

我需要将它获得的路径与多个硬编码路径名进行比较,但我如何使用缓冲区来做到这一点?这行得通吗:

char *path_of_file = dentry_path_raw(my_dentry, my_buffer, buflen);
char *test_path = "/root/file";
if (path_of_file == test_path) {
return 0;
} else {
return 1;
}

最佳答案

path = dentry_path_raw(dentry, buffer, buflen);

构建从结束 buffer 到开始的路径。也就是说,buffer[buflen - 1] 设置为“\0”,结果 path 指针将大于或等于 buffer

How am I supposed to know what the length should be without having the full path to begin with?

即使函数本身在完全写入之前也不知道路径的长度。只需选择具有一定长度的缓冲区并调用函数即可。路径长度的合理猜测是 PATH_MAX。如果函数发现长度不足,则返回错误代码 ERR_PTR(-ENAMETOOLONG)

至于路径比较,可以使用简单的strcmp(path, test_path)。如果知道test_path的长度,可以和path的长度比较,可以简单计算,然后使用memcmp:

if(test_path_len == ((buffer + buflen - 1) - path)
&& !memcmp(path, test_path, test_path_len)) // paths are equal

请注意,dentry_path_raw 返回相对于文件系统挂载点的 dentry 路径,包含此 dentry。因此,只有当 dentry 包含在根文件系统中时,它才是绝对路径。

关于c - 如何使用 dentry_path_raw(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33249643/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com