UNIXの"find"コマンド同等のプログラム作成について
お世話になっております。
現在UNIXの"-type f"オプションのついた"find"コマンドと同等のプログラムをC言語で作ろうとしています。
つまりディレクトリ内のファイル(サブディレクトリ内のファイル含む、ディレクトリは除外)を全てフルパスで表示するプログラムです。
現在下記の関数を作成したのですがうまく動いてくれません。
どなたかご教授いただけないでしょうか。
【問題】
プログラム内の(**)前後で"dir1"が変更される。
(**)前:"/ディレクトリA/"
(**)後:"/ディレクトリA/ディレクトリA内のファイル1"
本当は"dir1"には:"/ディレクトリA/"のままであってほしいです。
"strcat"コマンドの仕様が影響しているのでしょうか。
int _find(char dir1[] , int k ,int l , int m )
{
DIR *dir ;
struct dirent *dp ;
struct stat statbuf ;
char txt[1000] ;
if ( m == 0 ) l++ ;
if ( (dir = opendir(dir1)) == NULL ){
printf("%s",dir1) ;
perror("opendir") ;
exit(1) ;
}
for( dp=readdir(dir) ; dp != NULL ; dp=readdir(dir) ){
if ( strcmp(dp->d_name,".") != 0 && strcmp(dp->d_name,"..") != 0 ){
/* ROOT_DIR名-にファイル名を付け加えて、フルパスにする */
strcpy( temp[k][l] , dir1) ;
strcat( temp[k][l] , "/" ) ;
strcat( temp[k][l] , dp->d_name ) ; (**)
stat( temp[k][l] , &statbuf ) ;
if(S_ISDIR(statbuf.st_mode)){
l=_find(temp[k][l],k,l,1) ;
}else{
sort[k][l]=temp[k][l] ;
printf("temp[%d][%d]=%s\n",k,l,sort[k][l]);
printf( "dir5=%s\n",dir1) ;
l++ ;
}
}
}
closedir(dir) ;
return l ;
}
お礼
これを投稿した後、また色々サイトを見てたらこちらの回答に書かれてるように-aと-oあったので試したら動きました。有難うございます。Linuxだと多分-andとかなのかな?どうもです。