线程安全的readdir

我把apue的第一个程序示例,“列出一个目录中的所有文件”,改用线程安全的readdir_r重写了一次

#include <sys/types.h>
#include <dirent.h>
#include <iostream>

int main(int argc,char* argv[]){
  setlocale(LC_ALL,"");
  if(argc != 2){
    std::cerr<<"Wrong number of arguments! Need one"<<std::endl;
    return -1;
  }
  const char* dirname=argv[1];
  DIR* dp=opendir(dirname);
  if(dp==NULL){
    std::cerr<<"error when 'opendir' "<<dirname<<std::endl;
    return -1;
  }
  else{
    dirent dirp;    
    dirent* result;
    int error;
    while(( error=readdir_r(dp,&dirp,&result)) ==0){      
      if(result==NULL) break; ///读完了
      std::cout<<dirp.d_name<<"\n";      
    }
    closedir(dp);
  }
  return 0;
}

int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

readdir_r的result要么返回NULL,代表结束,要么指向entry.

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥