为什么我收到访问服务器 mqueue 的错误

问题描述

我尝试将消息从 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 (将#修改为@)