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

系统编程,find命令在递归时的错误!

    来源: 互联网  发布时间:2016-04-08

    本文导语:  我写的find命令,在递归的时候有错误,自己知道算法有错误了,但是自己没有想出好的方法,希望有高手出手阿! 如果有好的回答加分! /*  * find2.c  *  *function   : search all the file under this dir   *  * note    ...

我写的find命令,在递归的时候有错误,自己知道算法有错误了,但是自己没有想出好的方法,希望有高手出手阿!
如果有好的回答加分!
/*
 * find2.c
 *
 *function   : search all the file under this dir 
 *
 * note      : 
 *
 * usage     : find  path 
 */

#include
#include
#include
#include
#include
#include
#include
#include


void           findpathto ( char *  );


int main(int   argc , char     * argv[] )
{
        
        if ( argc == 1 ) 
findpathto(  "."  );
else 
    while ( -- argc )
    findpathto (  *++argv ) ;

printf(" n " );
return 0;
}



void    findpathto (  char     *this_path )
/* find path leading down to an object with this node 
 * kind  of     recursive 
 */

{
DIR  *dir_ptr;
struct  dirent  *direntp;
char            *its_name;

char            *dir_self = ".";
char            *dir_pert = "..";

if  (( dir_ptr = opendir ( this_path )) !=NULL )
   

{
while  ( (direntp = readdir ( dir_ptr ) ) != NULL )
         {
its_name = direntp->d_name;

                 if ( isadir ( its_name ) 
 && strcmp( its_name , dir_self ) !=0 
 && strcmp( its_name , dir_pert ) !=0 
   )
{
findpathto (its_name);

             printf ( "/%s" , this_path );
}
else
printf("%sn",its_name);
         }

}

else
{
perror ( this_path );
exit ( 2) ;
}



}


                   







|
首先假设,楼主的 isadir ( its_name )是自己写的一个判断its_name是否是目录的函数,当然及有可能是下面的写法:
        
        lstat(its_name,&statbuf);
       return (S_ISDIR(statbuf.st_mode)) 

那么楼主的错误主要出在当前目录和绝对目录下。

首先,函数 findpathto (  char     *this_path )的作用是打印目录this_path下的文件,但是这个this_path是个相对目录,就算你第一次调用是绝对目录,但是第二次调用在findpathto (its_name);处,而its_name = direntp->d_name,这个direntp->d_name是一个只有文件名称,没有路径的东东,那么再一次调用函数findpathto 就出错了。
比如目录结构为:/home/zyx/code,程序传入/home,第一次调用filepathto(/home),很正确。
然后,第二次调用就是filepathto(zyx),这时肯定不正确了!
解决方案:
一、设置工作目录法:在函数filepathto的opendir成功后开始,增加代码 chdir("this_path");,在函数if的最末尾增加代码chdir("..");就可以。
二、绝对路径法:在执行findpathto (its_name);前,想办法让its_name=this_path/direntp->d_name就可以了。


以下是广告信息。
——————————————————————————————
《精通Unix下C语言编程与项目实践》(http://book.educity.cn/viewbook.asp?id=87 ),
本书以实际应用为目标,直接讲述在产生中最有可能知识,并提供可直接使用的应用编程模板,对初学者尤其有帮助。

|
是什么错误啊? isadir ( its_name )这个接口是你自己写的?系统好像没有这个接口哦。

    
 
 

您可能感兴趣的文章:

  • java 汉诺塔Hanoi递归、非递归(仿系统递归)和非递归规律 实现代码
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 使用ps命令,如何使用系统命令根据进程名称获取进程和子进程的ID?除了ps,还有其它系统命令的办法吗?谢谢。
  • Ubuntu查看系统信息命令介绍
  • 在LINUX中使用C调用系统命令,怎么取得系统命令的输出?
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • linux系统安装测试命令oslevel,lsdev命令不识别
  • Ubuntu系统安装及升级命令
  • 查询ls命令的命令文件属于系统中的哪个软件包?(在线等)
  • Linux/Centos/Ubuntu清除系统缓存释放内存命令介绍
  • aix系统中,at命令能否定时执行命令
  • Linux系统命令:find(文件查找命令)介绍及用法示例
  • 请问LINUX7.2下,哪条命令是查看系统上曾经执行过的执行命令?(包括启动以前的)
  • linux 操作系统下ps命令介绍
  • 请问用哪个命令可以在命令行里显示系统当前的时间?
  • unix下用java.util.Date取系统时间比直接在系统下用date命令查看系统时间早整整一个小时
  • aix系统reboot命令使系统关机了,为什么?
  • linux系统中有哪些命令要用到proc文件系统?
  • 为什么我输入uerdel或者事startx这些命令时,系统说找不到这些命令,怎么办?
  • 请问如何使用系统命令修改系统参数
  • 有没有在windows下模拟Linux命令系统的软件! 我想学习Linux的基本命令!
  • Saloris系统下,如何使用java调用setenv命令和source命令????
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Unmounting initrd failed 错误表示什么错误?可能是由什么引起的?系统原来一直运行正常,突然发现系统登陆错误,重启提示以上错误。
  • sql2005 create file遇到操作系统错误5拒绝访问 错误1802
  • 在Linux系统上recv返回错误,通过errno得到的错误消息为"Interrupted system call"
  • 我的系统是linux9.0 我进入系统用ls查看文件的时候出现段错误,这是怎么回事?
  • 进入系统时出现错误
  • 修改proc文件系统中同时打开文件个数错误
  • RedHat9.0:程序运行“段错误”,为什么连执行系统命令都出现“段错误”?
  • E514: 写入错误 (文件系统已满?)
  • 我的RED HAT LINUX 的文件系统出了错误,怎样解结?谢谢!
  • Linux系统下安装Oracle X11错误解决办法
  • linux下使用易飞ERP系统出现“报表数据库连接错误!!”是怎么回事
  • 交叉编译系统调用模块错误
  • 请问如何解决因为库的版本与文件系统不兼容引起的段错误?
  • linux高手请帮忙,系统崩溃,段错误!!!
  • 装linux 出现错误-----未找到有效设备来创建新的文件系统.请检查你的硬件
  • socket创建失败,返回系统错误码84,invalid or incomplete multibyte or wide character
  • 我在linux系统下安装subversion时,运行svnadmin create命令时出现这个错误提示:
  • 出现segmentation fault 的错误后如何修复系统!!!
  • 启动过程中,文件系统检查有错误!该怎么样修复??
  • 请问Killed系统错误是什么原因造成的?如何避免?
  • win7/Windows7系统下载地址搜集整理
  • 问一个系统配置的问题:win2k系统能不能于SCO UNIX系统共存?
  • 怎样重装win7系统?win7重装系统步骤详细图文介绍
  • windows 系统是否是多用户操作系统,如何理解“多用户操作系统”的“多用户”?
  • 安装运行微软win7/Windows7系统要求及官方下载地址
  • 我现在想做一个权限管理系统,想让权限系统的利用性更强,我应该怎样设计权限系统呢.
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 谁知道哪里有用java开发的管理信息系统软件(如:图书馆管理系统,人事部管理系统)的代码?
  • Linux内存文件系统(ramdisk)的三种实现方式
  • 原来已安装好ubuntu,因系统崩溃,重装WINXP系统,如何再次登录ubuntu系统?


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3