问题描述
我尝试将消息从 client.c 发送到 server.c,我没有为客户端创建 msg 队列,我只是尝试使用在 server 中创建的队列,它仍然像 daemon 一样运行。 如果服务器 mqueue 已经在运行,为什么我找不到它? 这里我的错误代码: /MAFILE_CLIENT_3153mq_open :没有这样的文件或目录 注意:我试着打个招呼或打个招呼,但系统总是删除它们;
'#define FILE_SERVER "/MAFILE_SERVER_89" '
int main(int argc,char* argv[]){
mqd_t server_mq,client_mq;
//declarer la structure des attributs de la file de message
struct mq_attr atr;
atr.mq_maxmsg = F_MAX_MSG;
atr.mq_msgsize = F_MAX_SIZE;
int errnum;
int long_msg ;
//Creer le message envoyé par le client
//il doit contenir la base + le pid
char file_Client[19];
if((errnum =sprintf(file_Client,"%s_%d",FILE_CLIENT,getpid()))==-1){
fprintf(stderr,"sprintf %s \n",strerror(errnum));
exit(EXIT_FAILURE);
}
printf(file_Client);
long_msg = strlen(file_Client)+1;
fflush(stdout);
//ouvrir la file de message serveur
server_mq = mq_open(FILE_SERVER,O_WRONLY);
if(server_mq == (mqd_t)-1){ ///verifier que mq_open s'est bien déroulé
fprintf(stderr,"mq_open du serveur : %s \n",strerror(errno));
exit(EXIT_FAILURE);
}
这是 server.c 代码: 他正在运行,等待客户端发送消息
#define FILE_SERVER "/MAFILE_SERVER_89"
#define MAX_MSG 10
#define MAX_MSG_SIZE 240
int main(int argc,char* argv[]){
//initialiser les attributs de le file de message
struct mq_attr mq_att_serv;
mq_att_serv.mq_maxmsg = MAX_MSG; ///nombre de message est fixé a 10
mq_att_serv.mq_msgsize = MAX_MSG_SIZE; ///Taille maximale d'un seul message est fixé a 255 bit
//déclarer les variables pour la gestion d'erreur et de longueur de message
int errnum,long_msg ;
//ouverture et creation de la file
//de message du serveur
mqd_t file_server = mq_open(FILE_SERVER,O_RDONLY | O_CREAT,S_IRUSR|S_IWUSR | S_IRGRP | S_IWGRP,&mq_att_serv);// ouverture de la file en mode lecture
if(file_server ==(mqd_t) -1){ ///avec les droits d'exriture et et lecture de du fichier file message
fprintf(stderr,"mq_open %s \n",strerror(errno)); ///pour les user et les memebres de son groupe
exit(EXIT_FAILURE);
}
char buff[256]; //le buffer doit etre > mgssize de mq_att
size_t msg_length = sizeof(buff)+1;
while(1)
{
if((errnum = mq_receive(file_server,(char*)buff,msg_length,NULL))<0){
fprintf(stderr,"mq_receive : %s \n",strerror(errno));
exit(EXIT_FAILURE);
}
printf("%s",buff);
printf(" adresse %u \n ",buff[0]);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)