求救
小弟初学LINUX C编程,在编译有名管道的时候出现了问题,总打不开fifoserver,我修改了权限为777后还是不行
: y ]) Y+ M4 x1 [7 h代码如下:; ]- j: P% Y; Y( a
#include <sys/types.h>7 D1 u: e% I6 s' N" H6 u; b
#include <sys/stat.h>
. _/ a1 [7 O5 i& u#include <errno.h>% R* T8 D9 e: U+ b, S
#include <fcntl.h>
4 r0 ~6 P* L G2 V! q# H#define FIFO_SERVER "/tmp/fifoserver"
5 J q; }' S( p8 eint handle_client(char*);% n1 W; n+ b: l+ g' S! [# ^* V0 V/ }
main(int argc,char** argv)
4 B6 q7 A1 N# a& D) P{& c j" T" [" w/ G) `8 S
int r_rd;
3 b Y% i5 R- u/ U* B$ M5 E int w_fd; e2 s" z X* r- l4 |% x/ w8 q* F
pid_t pid;# y' y9 N: \7 a& E9 {
if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))# Z: H2 N: ^; T' m
printf("cannot create fifoserver\n");+ p8 h% b! P, B( x
handle_client(FIFO_SERVER);- g! ]3 q. R( z: O
$ \8 {8 }6 w2 k* d; a5 `
}
3 l; r* q: l7 g) i4 c# z8 ^int handle_client(char* arg)2 U+ @* |8 E/ M3 z( ~
{5 ?7 e/ s" S+ @
int ret;
1 a* v( d, t$ c1 ^. f L# |ret=w_open(arg);
6 R8 @' V0 Y2 j8 _7 G* D' }$ m5 \switch(ret)4 y6 s. {" C- o3 Z
{7 s( `! G7 l8 V! @
case 0:5 P7 s$ r( ` I2 P+ K0 c- Q
{ 4 B, `7 N/ B6 w) o8 s0 F4 E1 A9 R
printf("open %s error\n",arg);
4 W8 i: r2 \3 C& N printf("no process has the fifo open for reading\n");
5 ], e$ B9 o" j5 d, n. E; c# r; ^ return -1;5 I% G) s' ?& q
}
8 t J$ L, Y" `) [1 s case -1:
! E3 y: D5 M9 X6 u9 q9 M- | {: x( K. H# O, |3 t
printf("something wrong with open the fifo except for ENXIO");
, B" E7 w4 q! ~! K6 `5 h% s return -1;$ t' _; r0 x% L, ~9 ~/ M
}
3 n7 I" Q6 }: G' \( V case 1:
7 I/ H: S7 ~. K/ P {1 E' S: [! b/ ~0 u! _
printf("open server ok\n");/ y" R5 b# s3 c6 b& r, ^
return 1;
$ b C/ j; h' a7 {( g }7 q8 a" N" p( i* ]/ S: [
default:/ v( N( f5 Q$ d2 F
{, J) Y' o' i0 [" V8 |: Y
printf("w_no_r return ????\n");
M+ ^$ R6 T& @ return 0;6 J' Q( T7 p3 G% [' j, v# E
}, I |3 @- y: x6 ?. B2 {9 n
}
% ^2 }: _7 O+ [7 iunlink(FIFO_SERVER);/ B& I. R& c4 L* V: W7 ?
}
0 h4 V$ e: J* E, Z1 O" k0 p) ]int w_open(char*arg)
8 [. Y& ^, T- \: n1 L{3 x1 H4 m- Z( E2 S
if(open(arg,O_WRONLY|O_NONBLOCK,0)==-1). r( a% m* S7 h! D" ~
{ if(errno==ENXIO)
! f6 l9 P7 f7 b$ T: L6 g. o( s, f {
0 j* k- g/ L3 z% _ return 0;* a% v- m: L4 E$ e9 b" P
}
5 Z) s" E/ q* {. E$ W& ]+ x else
3 h' @( s \, G, i+ j6 u return -1;8 [; H( a, O1 R, i, m
}
$ v5 a3 C6 h, [: M ~6 M' Z* ?4 K return 1;/ V, L; |2 z7 D7 U
1 I5 [1 h9 S9 K2 T
}