帮忙看一下这个程序。运行时总显示“段错误”
程序作用:在 Linux 下,编写 Shell 程序,计算磁盘上所有目录下平均文件个数、所有目录平均,?1in`f R![
深度、所有文件名平均长度
hfSr
k#^源程序:
D `)w2t"w!uV9HWwww.linuxeden.com#include <sys/stat.h>
5W2eG}9x9Eg*N#include <sys/types.h>
qP8Ek?biLinux伊甸园论坛#include <string.h>
P7^6E;Wkw#MLinux伊甸园论坛#include <stdio.h>T.Tpuul
#include <stdlib.h>
nvaz%]
`)i
Qwww.linuxeden.com#include <dirent.h>
s2~ f~3b
ipint func(char*path,int* AllFileNumber,int* AllDepthNumber,
,]4x1jbQ5}4}:~{ int* AllFilenameNumber,int* AllFoldNumber)
7E,~;Fw1i9u:lwww.linuxeden.com{www.linuxeden.comIvA]$Cl5M
struct stat statbuf;*sNr_
dv9Gz
struct dirent *dirp;
!j0`Z^ on*@ DIR *dp;
|$NJ+?"^h char *str1;(z],bLt~
char *str2;bA'~/p;} x6r3C
int judge1;t8Zf P]i8@LW
int judge2;
"[[(i-E/eLinux伊甸园论坛 int ret;Linux伊甸园论坛EN)Oo'FJlc K/^
judge1=0;
yS Vteb)xk"ILinux伊甸园论坛 judge2=0;n5g!Ag(R2|0?H!e0{5U
~h
nX(hJ2`"I\
stat(path,&statbuf);Y(w+`r'Y9C"^.{
pDS~"p+g![Iswitch(statbuf.st_mode&S_IFMT)
a4c^}Q%]2R%f&Kwww.linuxeden.com{
X7r} P#jLinux伊甸园论坛case S_IFREG: Qj.MbJT
f
*AllFilenameNumber=strlen(path)+1;Linux伊甸园论坛x:C+bCcq
*AllFileNumber=*AllFileNumber+1;l.b/zE,W1u%ds
*AllDepthNumber=*AllDepthNumber+1;
!g4r3q,z4]cW6ra break;
'sF9C~+U1d&H-W h%ILinux伊甸园论坛case S_IFDIR: *AllDepthNumber=*AllDepthNumber+1;
0dsN$b0@?rC *AllFoldNumber=*AllFoldNumber+1;
4@$r!Cy$r&H$WU*sh dp=opendir(path);;l[,J \+EL)@bR%[
while((dirp=readdir(dp))!=NULL)
M'y
v`^I.P {
2DDM-b/n,q }
r if((strcmp(dirp->d_name,".")==0)||(strcmp(dirp->d_name,"..")==0))www.linuxeden.com#w4Wwk
z7Lc%W
b ^sKG9q7vX_
if(judge1==0){www.linuxeden.com.n+t}O8Vm
!p,h7Gd-t/sdf\ strcpy(str1,path);+_%m
b
p1I Dw
judge1=1;}www.linuxeden.com+~kcC(B-X9bHwr
if (judge2==0)G:Qmqv[_*NJ
{
^gsl)y#e str2=str1+strlen(str1);www.linuxeden.com~;m/C`6A+` g
judge2=1;
Nx V,tcNIXN
e }
$xnP4f!k5w0Rzdb B n}+pY0n7uUY
*str2++='/';
9r%^W"eUfIE *str2=0;
-S]g:[!J G(XK4kJLinux伊甸园论坛 strcpy(str2,dirp->d_name); In4T*XB*{
ret=func(str1, AllFileNumber,AllDepthNumber,e&n7^ Z(UE/i
y
AllFilenameNumber,AllFoldNumber);
BE8b6U"r Q(Y~{ *str2--;e%j6mpn|`
*str2=0;
.l.[9E[+z/S(@Linux伊甸园论坛 }
H
~2|!Rk9R/{ B closedir(dp); )|_;\F$\
break;
)jL D5~2Sa'Cdefault: break;
$z8FH'zOt&TM+R}Linux伊甸园论坛 ]y`zBZ
return 0;OA N$y_([~
}
N1n&X
AP2r
xj'H-?N]Linux伊甸园论坛int main(int argc,char *argv[])
3e,c
RG'wA}Linux伊甸园论坛{
v u!P1UTs'z
v&r]+\gLinux伊甸园论坛 int ret;
+w$s A!?_j F int AllFileNumber=0;www.linuxeden.com
h*HU.Q&e9u
int AllDepthNumber=0;
y
w,LX Lu
vSh,N
int AllFilenameNumber=0;Linux伊甸园论坛(r8ez8F
~0P8lRH:y
int AllFoldNumber=0;
fy8Wl#n7u
w
ret=func(argv[1],&AllFileNumber,&AllDepthNumber,&AllFilenameNumber,;x
Rj:^&z+]"V2t0^Zw
&AllFoldNumber);;Ut
Z
I;z5V#A8NK]xq
printf("The average filenumber is %d\n",AllFileNumber/AllFoldNumber);www.linuxeden.com r/p0p
@6Wl_&z x
printf("The average fileDepthnumber is %d\n",K-`q_7g0s
AllDepthNumber/AllFoldNumber);-oV;W'FJ {Pf"@7XM
printf("The average filenameNumber is %d\n",
4K d lNU7XC
XT ne AllFilenameNumber/AllFileNumber);
/|fD5`,t return 0;
%{ ^0Rc+R}
|