c-sel函数实现中的scandir

时间:2018-10-27 20:47:11

标签: c scandir

man scandir为我提供了scandir函数的以下结构:

int scandir(const char *dirp, struct dirent ***namelist,
              int (*filter)(const struct dirent *),
              int (*compar)(const struct dirent **, const struct dirent **));

假设我定义以下内容:

struct dirent **namelist;
int len = scandir('.', &namelist, NULL, NULL)

这将列出当前文件夹中的所有文件和文件夹名称。但是,假设我具有以下结构的filtercompar函数:

int (*filter)(const struct dirent *) {
}

和compar类似,我想根据某些条件调用此过滤器函数或仅NULL

if (some criteria) int *filters = NULL;
else int* filters = &filter
int len = scandir('.', &namelist, filters, NULL)

但这会导致指针错误。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

  1. filter是一个函数指针,而不是一个int指针。
  2. 在您的代码中,filter在本地范围内是if else块,这是错误的。

工作代码如下:

int nodots(const struct dirent *dp)
{
    return (dp->d_name[0] != '.');
}

int main(int argc, char **argv)
{
  struct dirent **entries;
  ...
  int (*myfilter)(const struct dirent *) = NULL;
  if(some_condition) myfilter = nodots;
  ...
  nents = scandir(".", &entries, myfilter, alphasort);
}