linux下C的段错误。

huchendushen 2011-10-14 04:31:31
代码如下,完成递归遍历目录的功能,输出目录中的文件名和文件类型,使用的是linux的低级IO函数,程序运行时发生段错误,不知道是为什么。

void listfiletype(char *name)
{
DIR *dp=opendir(name);
dirent *drp;
struct stat buf;//取得文件的元信息。
while((drp=readdir(dp))!=NULL)
{
lstat(drp->d_name,&buf);//以下if-else判断文件类型。reg普通文件,dir目录。
if(S_ISREG(buf.st_mode))
printf("%s:reg\n",drp->d_name);
else if(S_ISDIR(buf.st_mode))
{

if((strcmp(drp->d_name,".")!=0)&&
(strcmp(drp->d_name,"..")!=0))//don't search upper dir and current dir again.
{
printf("%s:dir\n",drp->d_name);
listfiletype(drp->d_name);//递归遍历目录。
}
}
else if(S_ISCHR(buf.st_mode))
printf("%s:char\n",drp->d_name);
else if(S_ISLNK(buf.st_mode))
printf("%s:link\n",drp->d_name);
else if(S_ISBLK(buf.st_mode))
printf("%s:block\n",drp->d_name);
else if(S_ISFIFO(buf.st_mode))
printf("%s:fifo\n",drp->d_name);
else if(S_ISSOCK(buf.st_mode))
printf("%s:socket\n",drp->d_name);
else
printf("other.\n");
}
closedir(dp);
}
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dd_zhouqian 2011-10-14
  • 打赏
  • 举报
回复
DIR *dp=opendir(name);

dp也需要做判断,不清楚,楼主如果能够确定listfiletype函数有问题,不如gdb调试找出问题
cocoabird 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yuelengdihai 的回复:]

closedir(dp)?应该是drp
[/Quote]
看错了
yby4769250 2011-10-14
  • 打赏
  • 举报
回复
段错误一般可以直接锁定在指针的访问那里
cocoabird 2011-10-14
  • 打赏
  • 举报
回复
closedir(dp)?应该是drp
S_aladdin 2011-10-14
  • 打赏
  • 举报
回复
请使用gdb调试

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧