int main(int argc,char argv[]){
DIR dp;
struct dirent dr;
struct stat buf;
char s_path,*d_path;
s_path=argv[1];
d_path=argv[2];
dp=opendir(s_path);
while((dr=readdir(dp))!=NULL){
stat(dr->d_name,&buf);
puts(dr->d_name);
printf("%od\n",buf.st_mode);
if(S_ISDIR(buf.st_mode)){
printf("this is a dir\n");
}
}
return 0;
}
c和dir不应该是目录吗?怎么被错认为文件了
你把代码整理一下缩进再重新发一下吧
我缩进了,但是一发出来就变成这样了...很无语
首先,你没有很了解stat的用法,觉得只要获得他们的属性即可判断是文件还是目录,其实还需要继续判断的。
int stat(const char pathname, struct stat buf);
定义了
struct stat buf,
那么当打开一个存在的文件路径pathname时候,需要使用
S_ISREG(m) is it a regular file?
S_ISDIR(m) directory?
S_ISCHR(m) character device?
S_ISBLK(m) block device?
S_ISFIFO(m) FIFO (named pipe)?
S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.)
S_ISSOCK(m) socket? (Not in POSIX.1-1996.)
这些来进行判断,或者使用
if(buf.st_mode | xxx )来进行判断,xxx表示以下宏:
S_IFMT 0170000 bit mask for the file type bit field
S_IFSOCK 0140000 socket
S_IFLNK 0120000 symbolic link
S_IFREG 0100000 regular file
S_IFBLK 0060000 block device
S_IFDIR 0040000 directory
S_IFCHR 0020000 character device
S_IFIFO 0010000 FIFO
这样你就可以判断哪一个是目录哪一个是文件了
readdir函数返回的是一个指针,但是dr是一个结构体,不是指针变量