问题描述
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <errno.h>
#define ERR(source) (perror(source),\
fprintf(stderr,"%s:%d\n",__FILE__,__LINE__),\
exit(EXIT_FAILURE))
void scan_dir() {
DIR* dirp;
struct dirent *dp;
struct stat filestat;
if (NULL == (dirp = opendir("."))) ERR("opendir");
do {
errno = 0;
if ((dp = readdir(dirp)) != NULL) {
if (lstat(dp->d_name,&filestat)) ERR("lstat");
printf("%s\n",dp->d_name);
}
}
while (dp != NULL);
}
我在这里了解大多数代码,但是我无法弄清楚dp
每次的更改/迭代方式。我以为可能是dp = readdir(dirp)
,每次都将dp
的值分配给另一个目录入口,但是我不确定,如果是这样,它将如何自动将其分配给下一个目录入口?
解决方法
在C中,=
是一个运算符,与其他所有运算符一样。 a = b
将变量a
设置为值b
,然后返回值b
。因此,y = (x = 1) + 2
将x设置为1,然后将1加2,然后将y设置为3。readdir
以DIR*
作为参数,而DIR*
具有一个确定要读取哪个文件的内部状态。每次您在其上调用readdir
时,它将返回下一个文件。请参阅文档here。