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