#include <iostream>
#include <dirent.h>
using namespace std;
int main()
{
string dirname = "./" ;
DIR * dp ;
struct dirent * dirp ;
if(( dp = opendir(dirname.data()) ) == NULL){
cout << "can not open " << dirname <<endl ;
return 0 ;
}
while((dirp = readdir(dp)) != NULL){
cout << dirp->d_name << endl ;
if(dirp->d_type == 4){
cout<<"===========" << "dir" << endl ;
}else if(dirp->d_type == 8){
cout<<"===========" << "file" << endl ;
}else{
cout<<"===========" << "other" << endl ;
}
}
closedir(dp);
return 0;
}
关于 struct dirent 中d_type字段的值说明如下:
enum
{
DT_UNKNOWN = 0, //未知类型
# define DT_UNKNOWN DT_UNKNOWN
DT_FIFO = 1, //管道
# define DT_FIFO DT_FIFO
DT_CHR = 2, //字符设备
# define DT_CHR DT_CHR
DT_DIR = 4, //目录
# define DT_DIR DT_DIR
DT_BLK = 6, //块设备
# define DT_BLK DT_BLK
DT_REG = 8, //常规文件
# define DT_REG DT_REG
DT_LNK = 10, //符号链接
# define DT_LNK DT_LNK
DT_SOCK = 12, //套接字
# define DT_SOCK DT_SOCK
DT_WHT = 14 //链接
# define DT_WHT DT_WHT
};
stat 和 lstat 函数
#include <stdio.h>
#include <sys/stat.h>
void chk(struct stat s){
if(S_ISREG(s.st_mode)) printf("普通文件\n") ;
else if(S_ISDIR(s.st_mode)) printf("目录\n") ;
else if(S_ISLNK(s.st_mode)) printf("symbol link\n") ;
}
int main() {
struct stat s ;
stat("./mysymlink",&s) ; // 直接读取被链接文件的属性
chk(s) ;
printf("%d\n",lstat("./mysymlink",&s)) ; // 读取软链接文件的属性
chk(s) ;
printf("%d\n",lstat("./getenv.c",&s)) ;
chk(s) ;
printf("%d\n",lstat("./a",&s)) ;
chk(s) ;
return 0;
}