Tag: readdir

在Ubuntu中的Directory中列出文件

我试图列出当前目录的父目录中的文件,但是当我尝试从终端执行此程序时,我得到分段错误..我做错了什么? 这是代码: #include #include #include int main(int argc, char *argv[]) { struct dirent *dirpent; DIR *dirp; if(argc!=2) { printf(“Cant continue with the program\n”); return 0; } dirp= opendir(argv[1]); if(dirp) { while(dirpent=readdir(dirp) !=NULL) printf(“%s\n”,dirpent->d_name); closedir(dirp); } return 0; }

DT_DIR未定义

我想检查readdir返回的文件是否是目录。 我尝试使用DT_DIR常量(正如man readdir所说),但它未定义。 我应该包含哪些文件才能获得它? 现在我用 #include #include #include #include gcc版本是4.6.1 编译字符串: gcc ac –std=c99 -Wall

使用opendir(),readdir()和closedir()高效遍历目录树

C例程opendir(),readdir()和closedir()为我提供了遍历目录结构的方法。 但是,readdir()返回的每个dirent结构似乎都没有为我提供一个有用的方法来获取我需要递归到目录子目录的DIR指针集。 当然,他们给我文件的名称,所以我可以将该名称附加到目录路径和stat()和opendir()它们,或者我可以通过chdir()和roll更改进程的当前工作目录它通过chdir(“..”)回来。 第一种方法的问题是,如果目录路径的长度足够大,那么将包含它的字符串传递给opendir()的成本将超过打开目录的成本。 如果你有点理论上的话,可以说你的复杂性可能超过线性时间(在目录树中(相对)文件名的总字符数)。 而且,第二种方法存在问题。 由于每个进程都有一个当前工作目录,因此除了一个线程之外的所有进程都必须在multithreading应用程序中进行阻塞。 另外,我不知道当前工作目录是否仅仅是方便(即,在文件系统查询之前将相对路径附加到它)。 如果是这样,这种方法也会效率低下。 我接受这些function的替代品。 那么如何有效地遍历UNIX目录树(在其下的文件的总字符数中的线性时间)?

仅列出常规文件(没有目录)问题

你知道为什么这个程序没有列出某些文件,即使它们是“常规”的吗?: #include #include #include #include #include int main(void) { DIR *dh = opendir(“./”); // directory handle struct dirent *file; // a ‘directory entity’ AKA file struct stat info; // info about the file. while (file = readdir(dh)) { stat(file->d_name, &info); printf(“note: file->d_name => %s\n”, file->d_name); printf(“note: info.st_mode => %i\n”, info.st_mode); if (S_ISREG(info.st_mode)) printf(“REGULAR FILE FOUND! […]

readdir()以点而不是文件开头

我有一点问题。 我正在从目录中读取文件并且它可以工作,但它在开始时读取了两个额外的文件……它是什么? 例如,有一个文件列表: “A348”, “A348A”, “A348B” ,这就是我得到的: “.”, “..”, “A348”, “A348A”, “A348B” ?? ? DIR *dir; struct dirent *dp; char * file_name; while ((dp=readdir(dir)) != NULL) { file_name = dp->d_name; }

如何使用S_ISREG()和S_ISDIR()POSIX宏?

这是我写的一个C程序,用于递归导航和输出目录和常规文件。 它在我的Linux机器上编译并运行良好。 但是在Solaris上, dit->d_type == 8检查和其他类似的检查不起作用,因为没有d_type字段。 我已经读过这个问题的答案是使用S_ISREG()和S_ISDIR()宏,但是它们在我目前的代码中完全无法工作。 我评论了在我的Linux机器上运行的行。 #include #include #include #include #include #include #include #include void helper(DIR *, struct dirent *, struct stat, char *, int, char **); void dircheck(DIR *, struct dirent *, struct stat, char *, int, char **); int main(int argc, char *argv[]){ DIR *dip; struct dirent *dit; struct stat statbuf; […]