stat函数段错误
环境centos7 编程语言c
今天在用stat函数读取文件夹的状态是出错,一开始直接传入文件文件夹名返回都是-1,后来查了一下发现需要传入绝对路径,于是文件名与路径名组合起来传入stat之后就报段错误,改了半天都没发现怎么回事,gdb跟踪也没发现什么问题
下面是代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
DIR *dp;
struct dirent *ep;
struct stat st;
char dirp[50];
char absPath[100];
printf("请输入目录:\n");
scanf("%s",&dirp);
dp=opendir(dirp);
printf("filename:\ttype:\tPermission\taccesstime\tlastmodtime\tsize\t\n");
if(dp!=NULL)
{
printf("xxx\n");
while(ep=readdir(dp))
{
if(ep->d_name[0]!='.')
{
printf("xx\n");
if(strcmp(dirp,"/")==0)
{
strcpy(absPath,dirp);
strcat(absPath,ep->d_name);
}else
{
strcpy(absPath,dirp);
strcat(absPath,"/");
strcpy(absPath,ep->d_name);
}
printf("%s\n",absPath);
if(stat(absPath,&st)!=-1)
{
printf("%s\t",ep->d_name);
if((st.st_mode&S_IFMT)==S_IFDIR)
printf("Directory\t");
else if((st.st_mode&S_IFMT)==S_IFBLK)
printf("Block special file\t");
else if((st.st_mode&S_IFMT)==S_IFCHR)
printf("character special file\t");
else if((st.st_mode&S_IFMT)==S_IFREG)
printf("Ordinary file\t");
else if((st.st_mode&S_IFMT)==S_IFIFO)
printf("pipefile file\t");
printf("%o\t",st.st_mode&0x1ff);
printf("%15s\t",ctime(st.st_atime)); //文件创建时间
printf("%15s\t",ctime(st.st_mtime)); //文件上次修改时间
printf("%ld\n",st.st_size);
}
}
}
closedir(dp);
}else
{
puts("Couldn't open the directory.\n");
}
return 0;
}
运行截图:
GDB跟踪打印的信息:
希望各位大佬给我这个初学者一点提示,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
stat
报的(你在 gdb 的时候,发现 stat 没有报错怎么不往下看看),而是printf("%15s\t",ctime(st.st_atime));
以及下面那句,在调用 ctime 的时候,翻下 man 看看 ctime 是怎么用的scanf("%s",&dirp);
这里你不觉得很不自然吗?