发新话题
打印

请编程高手指教

请编程高手指教
4 p* S* g8 O1 A1 k) _5 ]* _' ~5 e) Y; F/ ^$ p
我在学unix进程间通信----SYSTEM V消息队列的时候遇到如下问题: C# }4 n. M. o; d: w
[root@localhost svmsg]# make2 G$ ~( g  O/ s7 o( v
gcc -g -O2 -D_REENTRANT -Wall   -c -o ctl.o ctl.c) [) [2 V' f5 Z+ o
) j8 l% }, I+ I6 H0 _2 u" A
ctl.c: In function `main':$ x9 x0 p$ e+ l( S2 T
ctl.c:8: storage size of `buf' isn't known) R3 x6 M+ m! k$ ?
ctl.c:10: `MSG_R' undeclared (first use in this function)
+ q. u1 ^: }/ |7 wctl.c:10: (Each undeclared identifier is reported only once
3 o- E, G7 k4 X3 g+ D8 rctl.c:10: for each function it appears in.)
4 h% T8 F' @7 w' Dctl.c:10: `MSG_W' undeclared (first use in this function)
% t: S  O9 l  q7 e- Fctl.c:18: `ulong_t' undeclared (first use in this function): l" g+ `$ h) C: g9 e& W7 L$ Q

$ F: g3 p  v6 Q! G
/ I4 g3 @# X( [  k* A# w下面是ctl.c文件( G& U+ g$ Y/ J) m* {$ ?
#include        "unpipc.h"
0 d8 j5 ?% T) g( k6 Y, W5 m3 `" m, p
int
# L, q' D4 b6 S+ Xmain(int argc, char **argv)
& Q! [: t6 b  [7 G6 S{
( \& s& \2 I! s/ m        int                             msqid;
* H2 R, U% g! A        struct msqid_ds info;3 \+ b% m4 x2 z: y, A
        struct msgbuf   buf;/*问题所在处*/+ }9 l0 |4 a% K) o
. k0 c( R8 `" c* [$ N5 e: |
        msqid = Msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT);/*问题所在处*/2 A3 j5 P9 @9 B2 a+ w
' _, g/ [7 L' _' _

  E0 J/ h6 T) _" g+ J! ^        /*other code*/; F4 l0 s) A  q! j  u0 T0 P+ ~
}5 s. x- {, `! L6 K- m; e4 D5 m

$ B$ P5 W0 q8 {6 s: [9 b. ]3 \$ o6 |: y. x
下面是unpipc.h文件节选
' i# L# f! u/ f$ Y#ifdef  HAVE_SYS_MSG_H
; S9 U: N" ^! _! ]; w* Z" a# include       <sys/msg.h>             /* System V message queues */* C+ J/ ?, I; J
#endif# }! N& ?5 y  C$ f

5 t, W9 }' M9 ]) E9 R$ X8 d5 _, H# c4 R4 g5 V* M) p
#define SVMSG_MODE      (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6)/*问题所在处*/6 |+ X% D' k9 v
                                        /* default permissions for new SV message queues */
$ G- H+ c! ~  x( p' }/ `: P7 `/* $$.ix [SVMSG_MODE]~constant,~definition~of$$ */
. k* _! C5 x/ I5 r- y/ Q" E5 ~. L- r1 A" D% b5 o% B/ T" Y7 p0 N  \
' E- @  q* @. z9 `- @/ S
下面是<sys/msg.h>文件
# A5 v8 L2 P' X* @* a#ifdef __USE_GNU- F/ W) H) ]1 h" m+ P& K
/* Template for struct to be used as argument for `msgsnd' and `msgrcv'.  */" x' s. J" W. A* w) t# q2 g0 P* y: L
struct msgbuf* V, W3 g8 Z$ Z! y( k
  {
7 P2 e  m" O$ W2 I    long int mtype;             /* type of received/sent message */' x, a+ U8 t  f3 d, Y% L8 ?
    char mtext[1];              /* text of the message */1 f! V& Y& I  o- z% m
  };6 ~3 f& r" z& L& W
#endif
/ ?% u4 `; _. U
( ]! C' Y7 v  S( F" M. R* A, E请各大虾多多指教!!(我用的是linux7.0)
& ^$ a" u- E( U      

TOP

可以用O_RDWD 替换程序中的MSG_R||MSG_W(具体含义说明请参照<sys/fcntl.>说明;
4 u, Y9 ^4 E, U+ B0 t用ulong 替换程序中的ulong_t(或在<sys/types.h>增加ulong_t的说明.      

TOP

发新话题