我正在为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
如果没有完整的路径,我怎么知道长度应该是多少?
即使函数本身也不知道路径的长度,直到它完全写入它只需选取一些长度的缓冲区并调用函数路径长度的正确猜测是PATH_MAX如果函数发现长度不足,则返回错误代码ERR_PTR(-ENAMETOOLONG)
至于路径比较,可以使用simplestrcmp(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的返回路径包含这个dentry所以,只有当根文件系统包含dentry时,它才是绝对路径。

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

10-11 21:16