发新话题
打印

请教Linux下C编程问题:段错误,fseek

请教Linux下C编程问题:段错误,fseek

各位大侠,初学linux下c编程,困难重重,还请赐教啊。先谢谢了啊,以下是调试过程:; C& S, W8 \2 S  y; @
43        if((connectfd=accept(listenfd,(struct sockaddr *)&client,&sin_size))==-1){; Q5 i# F/ ~, r8 Z
(gdb)
& R1 Z; W, V3 t47       process_cli(connectfd,client);
7 O$ _# P# N$ w5 e5 M(gdb)3 j$ z3 y- F" o) Q* Q" i* O
2 x% O" x# s4 w
Breakpoint 2, process_cli (connectfd=6, client=; H1 a  J9 |, Y
      {sin_family = 2, sin_port = 9603, sin_addr = {s_addr = 1728161984}, sin_zero = "瞱\022繲\006\215?"}) at zfpserverT.c:55: e# z' Q6 ~. P# s# L$ k
55        printf("You got a connection from %s.",inet_ntoa(client.sin_addr));$ n5 J" W' n$ {+ z! V& V) P/ I
(gdb)
' o1 F/ m  ]; M' Y% t56        num=recv(connectfd,file_name,SEND_BUFFER_SIZE,0);  V( y% j+ B0 b- g- B2 g2 X
(gdb)
$ ?% G- T* D% q9 H5 f- `% A57        if(num==0){/ U) ?0 @; l4 g) c$ I
(gdb)  S! \* v( [% m" S
62        file_name[num-1]='\0';
- V. q2 W% L: s2 K1 ^(gdb)
: s5 u! H9 i* r( g, B/ e7 i! ?: f; c63        printf("The filename the client needs is %s.\n",file_name);$ b! k  z* ^+ t& P+ c7 e
(gdb)2 K( N! i7 q0 k* @
You got a connection from 192.168.1.103.The filename the client needs is 1.mp3.( ^1 i; T$ N# m$ T  A
64        switch(file_name[0])7 M, F. ?# V8 t1 l  x$ W, Q5 P. P
(gdb)( X  B5 L! e% w4 \! S+ u! R
79                {sourceFile=fopen("/temp/1.mp3","r");/ L- v- h3 u! M$ V
(gdb)/ V) [: d3 e- {' R3 A. b
80                 break;
$ q6 A, c' b  l0 ^, W(gdb)/ k: q$ B7 C% H; Z1 M) F
83         leftToSend=sizeof(sourceFile);
, k* ~- T8 _; i2 }; S/ d" a(gdb)
3 r+ z- V' o8 @# G) ^84         fseek(sourceFile,0L,SEEK_SET);
# j- p& d8 W/ N# b4 z& E(gdb)
3 q: A  A8 k6 e0 v' F9 [
4 {0 k8 q: }2 fProgram received signal SIGSEGV, Segmentation fault.  ]- o% @8 Y3 k$ m, J) X
0x42069267 in fseek () from /lib/tls/libc.so.6
. W1 X$ T  n; |% q& y+ v) H$ i(gdb) where6 l, Q4 k  i2 X
#0  0x42069267 in fseek () from /lib/tls/libc.so.6) m; @7 J7 K$ _4 ?! q/ q. m: r
#1  0x080488b6 in process_cli (connectfd=6, client=
  F% w6 Y$ |7 \, E- b1 t      {sin_family = 2, sin_port = 9603, sin_addr = {s_addr = 1728161984}, sin_zero = "瞱\022繲\006\215?"}) at zfpserverT.c:84
/ v6 }" X5 C7 O2 A8 g#2  0x080487b9 in main () at zfpserverT.c:47
7 w3 n4 J$ @/ j1 B#3  0x42015574 in __libc_start_main () from /lib/tls/libc.so.6      

TOP

这种问题别人很难帮你的 可否考虑用 valgrind 跑一下看看      
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

你该贴源代码,而不是调试信息。+ p7 g$ x4 a" F) A
可能你文件打开有问题,记得检测返回值。      

TOP

sourceFile=fopen("/temp/1.mp3","r");& l' V1 D8 z) _7 }$ C# u
如果打开不成功就会出错。0 r4 g4 X$ W* v- I) x
应该改成
6 ?- h# e; z2 U. G9 W' Y5 W; }+ h  Zif( !(sourceFile=fopen("/temp/1.mp3","r")))2 K1 n, D7 N2 ]9 O6 |* c7 s% ^
    return;9 H/ c1 l' V  i8 w
好一点      
Debian linux 4.0

TOP

发新话题