当前位置: 技术问答>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是否是目录的函数,当然及有可能是下面的写法:
那么楼主的错误主要出在当前目录和绝对目录下。
首先,函数 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 ),
本书以实际应用为目标,直接讲述在产生中最有可能知识,并提供可直接使用的应用编程模板,对初学者尤其有帮助。
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 )这个接口是你自己写的?系统好像没有这个接口哦。