当前位置: 技术问答>linux和unix
一个简单的pwd,segfault了
来源: 互联网 发布时间:2017-04-29
本文导语: 看书上代码写的,可是一运行就出现 Segmentation fault #include #include #include #include #include #include #include #define BUFSIZE NAME_MAX ino_t get_inode(char*); void printpathto(ino_t); void inum_to_name(ino_t,char*,int); int main(int argc...
看书上代码写的,可是一运行就出现 Segmentation fault
#include
#include
#include
#include
#include
#include
#include
#define BUFSIZE NAME_MAX
ino_t get_inode(char*);
void printpathto(ino_t);
void inum_to_name(ino_t,char*,int);
int main(int argc, char** argv)
{
printpathto(get_inode("."));
putchar('n');
return 0;
}
ino_t get_inode(char* filename)
{
struct stat info;
if(stat(filename,&info)==-1)
{
fprintf(stderr,"Cannot stat");
perror(filename);
exit(1);
}
return info.st_ino;
}
void printpathto(ino_t this_node)
{
ino_t my_inode;
char its_name[BUFSIZE];
if(get_inode("..")!=this_node); //if this is not root
{
inum_to_name(this_node,its_name,BUFSIZE);
chdir("..");
my_inode=get_inode(".");
printpathto(my_inode); //recursive print
printf("/%s",its_name);
}
}
void inum_to_name(ino_t inode_to_find, char* namebuf, int bufsize)
{
DIR* dir_ptr;
struct dirent * direntp;
dir_ptr=opendir(".");
if(dir_ptr==NULL)
{
perror(".");
exit(1);
}
while((direntp=readdir(dir_ptr))!=NULL)
{
if(direntp->d_ino == inode_to_find)
{
strncpy(namebuf, direntp->d_name, bufsize);
namebuf[bufsize-1] = ''; //just in case
closedir(dir_ptr);
return ;
}
}
fprintf(stderr, "error looking for inum %dn",(int)inode_to_find);
exit(1);
}
|
你这个程序也太夸张了吧,
if(get_inode("..")!=this_node);
这句结尾居然一个分号,递归太多了,早堆栈溢出了。
if(get_inode("..")!=this_node);
这句结尾居然一个分号,递归太多了,早堆栈溢出了。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。