当前位置:  技术问答>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);
这句结尾居然一个分号,递归太多了,早堆栈溢出了。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • $(shell pwd)和$(pwd)有什么区别
  • pwd|sed 's//cygdrive/([a-z])/1:/' | sed 's///#/g'`\/(pwd代表绝对地址)这个sed又是什么
  • 请教:$PWD 这个东西是什么意思啊?谢谢!
  • 【------------pwd命令--------------】
  • 谁知道这个函数session.setAttribute("pwd",javabean.getpwd()) 及它的参数的作用 ,并说明一下
  • pwd查看工作目录是从home/开始一直到当前文件么?
  • 请问,如何将 $PWD 设置为 命令提示符($PS1) -----
  • clearmake -C gnu -f Makefile 'pwd' /all
  • minix filesystem v1.0 中current->root, current->pwd两个指针指向的值是在什么时候得到值的?
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,