当前位置:  技术问答>linux和unix

求各位大神的解答,linux一个小程序的问题,至今仍困扰着我!

    来源: 互联网  发布时间:2017-04-05

    本文导语:  其实这个程序就是想实现ls -al  的功能 ,但遇到一个问题,让我迟迟没有解决,上代码吧,大家复制代码后试试?       1 #include       2 #include       3 #include       4 #include       5 #include      ...

其实这个程序就是想实现ls -al  的功能 ,但遇到一个问题,让我迟迟没有解决,上代码吧,大家复制代码后试试?
      1 #include
      2 #include
      3 #include
      4 #include
      5 #include
      6 #include
      7 #include
      8 
      9 
     10 #define N_BITS 3
     11 #define MAX_PATH 80
     12 
     13 void output_dir_info(const char *new_docunment);
     14 void output_file_info(struct stat file);
     15 
     16 int main(int argc,char **argv)
     17 {
     18         char *docunment_path;
     19         docunment_path=(char *)malloc(sizeof(char)*MAX_PATH);
     20         getcwd(docunment_path,MAX_PATH);
     21         if(argc==1)                          //read current docunment   
     22                 output_dir_info(docunment_path);
     23         else if(argc==2)                     //panduan pramamter
     24         {
     25                 struct stat stat_file;
     26                 stat(argv[1],&stat_file);
     27                 if(S_ISREG(stat_file.st_mode))         //a file
     28                 {
     29                         output_file_info(stat_file);
     30                 }
     31                 else if(S_ISDIR(stat_file.st_mode))                             //a docunment
     32                 {
     33                         char *new_docunment;
     34                         new_docunment=(char *)malloc(sizeof(docunment_pa        th)+1+sizeof(argv[1])+1);
     35                         sprintf(new_docunment,"%s/%s",docunment_path,a        rgv[1]);
     36                         output_dir_info(new_docunment);              //read dir
     37                 }
     38         }
     39         else                            //input error
     40         {
     41                 fprintf(stderr,"Usage :%s [file_name or dir_name]n",arg        v[0]);
     42         }
     43 
     44         return 0;
     45 }
     46 void output_dir_info(const char *docunment)                                            //read dir
     47 {
     48         DIR *dirp=NULL;
     49         dirp=opendir(docunment);
     51         struct dirent *entp=NULL;
     52 
     53         while(NULL!=(entp=readdir(dirp)))
     54         {
     55                 if(strcmp(entp->d_name,"..")==0||strcmp(entp->d_name,"."        )==0)
     56                 {
     57                         continue;
     58                 }
     59                 char *file_path=(char *)malloc(sizeof(docunment)+1+sizeof(entp->d_name)+1);
     60                 sprintf(file_path,"%s/%s",docunment,entp->d_name);
     61                 struct stat stat_file;
     62                 stat(file_path,&stat_file);
     63                 output_file_info(stat_file);
     64         }
     65 }
     66 void output_file_info(struct stat file)                //print file
     67 {
     68         unsigned int i ,mask=0700;
     69         unsigned num_temp;
     70         static char *perm[]={"---","--x","-w-","-wx","r--","r-x","rw-","        rwx"};
     71         for(i=3;i;i--)
     72         {
     73                 num_temp=(file.st_mode&mask)>>(i-1)*N_BITS;
     74                 printf("%3s",perm[num_temp]);
     75                 mask>>=N_BITS;
     76         }
     77         printf("t%dt%dt%ldt%ldn",file.st_nlink,file.st_uid,file.st_        size,file.st_atime);
     78 }

       程序运行时传递一个“目录”作为参数。 问题主要出在line47-line51,当运行到47行时,用gdb单步调试发现char *docunment = 当前的目录路径,但一到line51后,char *docunment的值就不对了??一直没搞清是为什么??  求各位大神帮小弟一把! 非常感谢
                                                                

|
你59行分配的空间不足吧
 char *file_path=(char *)malloc(sizeof(docunment)+1+sizeof(entp->d_name)+1);

那个sizeof(document)是指针本身的大小,通常是4

你这儿应该改为strlen(document)

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












  • 相关文章推荐
  • 大神们好! yum install gcc出现错误,请大神指点!
  • 求助~~哪位大神晓得如何固定tuxedo客户端与通信端的端口呀?
  • 请教各位大神 linux安装的步骤!
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • 一个很简单的liunx的问题。。。希望大神给个指点
  • 我的D盘不见了。。求大神。。。
  • 用U盘装红帽9,怎么装 ?求大神!!!!
  • ubuntu kde,神奇的输入法问题,求解,求大神显灵
  • 求大神赐教 关于brctl
  • 哪位大神给解释一下repo init和git chone的区别
  • 大神们帮我看看这个死机的原因
  • 急!跪求大神赐教。fedora16 grub文件丢失
  • 求助 crontab -l & crontab -e 报错,谢各位大神先~~
  • 菜鸟求大神指导?
  • Java做Web开发,想学习下Linux,不知用什么版本的好,望各位大神们指点
  • 求大神详细讲解下KDbg的使用方法
  • linux装载刚编译2.6.38.8内核,错误了, 那个大神帮帮小白
  • 求各位大神给一个 进程 自启动脚本
  • 在VMware中安装Fedora中出现错误mount:special device /dev/hda does not exist,求大神解决
  • 关于postfix的问题,求大神进来看下


  • 站内导航:


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

    ©2012-2021,