- 论坛徽章:
- 0
|
8 #include<stdio.h>
9 #include<sys/types.h>
10 #include<sys/ipc.h>
11 #include<stdlib.h>
12 #include<sys/msg.h>
13 #include<string.h>
14 #include<syslog.h>
15 #include<errno.h>
16 #include<unistd.h>
17 #include<signal.h>
18 #include<sys/stat.h>
19 #include<sys/param.h>
20 #include<errno.h>
21
22 #define BUF_SIZE 256
23 #define PROJ_ID 32
71
72 int main()
73 {
74
75 init_daemon(); /*守护进程创建*/
76
77 key_t key;
78 int qid; /*消息队列标志*/
79 int len;
80 struct msgbuffer msgbuf;
81 int j=0;
114 else if(fork()==0)
115 {
116 key_t msgkey;
117 int msgid; /*消息队列标志*/
118 int msglen;
119 struct msgbuffer msg;
120 errno=0;
121
122 /*获取键值*/
123 if ((msgkey=ftok(path_name,PROJ_ID))==-1)
124 {
125 perror("ftok error!\n");
126 exit(1);
127 }
128 /*获取消息队列标志符*/
129 if((msgid=msgget(msgkey,IPC_CREAT|0666))==-1)
130 {
131 perror("msgget error!\n");
132 exit(1);
133 }
134
135 msg.msgtype=SERVER_MSG;
136 strcpy(msg.msgtext,"hello");
137 msglen=sizeof(struct msgbuffer)-4;
138 if(msgsnd(msgid,&msg,msglen,0)==-1)
139 {
140 perror("msgsnd error!\n");
141 exit(1);
142 }
143
144 while(1)
145 {
146 sleep(5);
147 if(msgrcv(msgid,&msg,msglen,CLIENT_MSG,IPC_NOWAIT)==-1)
148 {
149 syslog(LOG_USER|LOG_INFO,"msgrcv error!reason:%d\n",errno);
150 if(errno==42){
151 if(fork()==0)
152 {
153 execvp(path_name,NULL);
154 syslog(LOG_USER|LOG_INFO,"the client restart");
155 }
156 }
157 else exit(1);
158 }
159 else
160 {
161 syslog(LOG_USER|LOG_INFO,"Client:%s\n",msgbuf.msgtext);
162 j++;
163 syslog(LOG_USER|LOG_INFO,"%d\n",j);
164
165 msgbuf.msgtype=SERVER_MSG;
166 strcpy(msgbuf.msgtext,"hello");
167 msglen=sizeof(struct msgbuffer)-4;
168 if(msgsnd(msgid,&msgbuf,msglen,0)==-1)
169 {
170 perror("msgsnd error!\n");
171 exit(1);
172 }
173
174 }
175
176 sleep(5);
177 }
178 }
179 else
180 {
181 continue;
182 }
183 }
184 }
运行出现:
server.c: 在函数‘main’中:
server.c:184: 错误: expected declaration or statement at end of input
网上查了是“某一个函数或者变量没有在使用之前声明。”找了半天,还是没有找到。。。。郁闷。。。
[ 本帖最后由 cyg19860205 于 2009-5-11 18:26 编辑 ] |
|