电脑技术学习

UNIX 文件系统基本操作

dn001

  process_Directory() 函数(开始于清单 3,结束于清单 6)读取了指定的目录,并显示了每个条目的相关信息。opendir() 返回的 DIR 指针与 fopen() 返回的 FILE 指针类似,它是一个用于跟踪目录流的操作系统特定的对象,您应该忽略其具体内容。

  清单 3. 处理一个目录

unsigned process_directory( char *theDir )
{
  DIR *dir = NULL;
  struct dirent entry;
  struct dirent *entryPtr = NULL;
  int retval = 0;
  unsigned count = 0;
  char pathName[PATH_MAX + 1];
  /* Open the given directory, if you can. */ 
  dir = opendir( theDir );
  if( dir == NULL ) {
    printf( "Error opening %s: %s", theDir, strerror( errno ) );
    return 0;
  }

  在打开了指定的目录之后,调用 readdir_r()(请参见清单 4)以获取关于第一个条目的信息,随后每次调用 readdir_r() 都将返回下一个条目,直到到达了目录末尾,并且 entryPtr 被设置为 NULL。这里还使用了 strncmp() 来检查“.和“..条目,以便略过它们。如果不略过它们,您将永远都在处理类似“theDir/./././././././././.等这样的目录。

  清单 4. 读取一个目录条目

  retval = readdir_r( dir, &entry, &entryPtr );
  while( entryPtr != NULL ) {
    struct stat entryInfo;
    
    if( ( strncmp( entry.d_name, ".", PATH_MAX ) == 0 ) ||
      ( strncmp( entry.d_name, "..", PATH_MAX ) == 0 ) ) {
      /* Short-circuit the . and .. entrIEs. */
      retval = readdir_r( dir, &entry, &entryPtr );
      continue;
    }

标签: