C 在任何操作系统中获取根目录

C 在任何操作系统中获取根目录,c,directory,operating-system,filesystems,c89,C,Directory,Operating System,Filesystems,C89,不管操作系统是什么,有没有办法让DIR指针指向根目录?最好不进行宏检查,如ifdef\u WIN32 endif等。。例如,在windows中,指向C/文件夹的指针将被返回。我不使用windows,所以我不确定这个答案是否像opendir/一样简单,或者下面的代码是否能在windows上正常工作。但是,假设/。。在Windows上工作,并且C:/。。返回NULL,以下命令应打印根目录中的所有项 #include <stdio.h> #include <stdlib.h>

不管操作系统是什么,有没有办法让DIR指针指向根目录?最好不进行宏检查,如ifdef\u WIN32 endif等。。例如,在windows中,指向C/文件夹的指针将被返回。

我不使用windows,所以我不确定这个答案是否像opendir/一样简单,或者下面的代码是否能在windows上正常工作。但是,假设/。。在Windows上工作,并且C:/。。返回NULL,以下命令应打印根目录中的所有项

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <dirent.h>

DIR* _get_root(void) {
    DIR     *d = NULL, *prev = NULL;
    char    *path = malloc(strlen(".") + 1);
    char    *pdir = "/..";

    strcpy(path, ".");

    do {
        if (prev) {
            closedir(prev);
        }
        prev = d;

        path = realloc(path, strlen(path) + strlen(pdir) + 1);
        strcat(path, pdir);

        d = opendir(path);
    } while (d);

    free(path);
    return prev;
}

int main(int argc, char **argv) {
    DIR             *root = _get_root();
    struct dirent   *sub;

    while ((sub = readdir(root))) {
        printf("%s\n", sub->d_name);
    }

    closedir(root);
    return 0;
}
在Windows上,查看它是否工作

有没有办法让DIR指针指向根目录 不管操作系统是什么?最好没有宏 像这样检查ifdef\u WIN32 endif等。。例如在 将返回指向C/文件夹的windows指针

这个问题假定首先有一个单一文件系统根的通用概念。事实并非如此。特别是Windows是一个多根文件系统,每个驱动器号都有一个单独的根,而且,由于没有主驱动器的绝对意义,Windows的系统文件不一定在C:驱动器上。事实上,支持C语言的操作系统根本不需要有分层文件系统


总的来说,传递给fopen、opendir和co.的文件名字符串的解释取决于实现,因此不,该语言没有提供一种通用的方法来将目录*传递到文件系统根目录,即使在这个概念最初有意义的系统上也是如此。这是一个很好的理由来重新考虑为什么你认为你想要这样的东西——不管你想用它做什么,都可能不像你想的那么普遍。

也许是某种循环开启了。。在opendir返回NULL之前,Unixfike系统上/的父目录也是/。从经典意义上讲,两者的inode数都是/。和/。。如果为2,则该值应相同,无论它是否实际为2。
DIR *root = opendir("/");