abchehead 发表于 2020-2-25 19:07

c语言问题

你好,就是可以编译但是运行就报错get err:No such file or directory是什么原因


#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct msgbuf
{
        long type;
        char data;
};
main()
{
        key_t key;
        int msgid;
        int i;
        struct msgbuf msg;
       
        //1创建消息队列
        key=ftok(".",200);
        if(key==-1) printf("ftok err:%m\n"),exit(-1);
       
        msgid=msgget(key,0/*IPC_CREAT|IPC_EXCL|0666*/);
        if(msgid==-1)printf("get err:%m\n"),exit(-1);
        //2构造消息
               
        //3发送消息
        for(i=1;i<=10;i++)
        {
                bzero(msg.data,sizeof(msg.data));
                msg.type=1;
                sprintf(msg.data,"MessageI:%d",i);
                msgsnd(msgid,&msg,sizeof(msg.data),0);
        }
        for(i=1;i<=10;i++)
        {
                bzero(msg.data,sizeof(msg.data));
                msg.type=2;
                sprintf(msg.data,"MessageII:%d",i);
               
                msgsnd(msgid,&msg,sizeof(msg.data),0);
        }
        //4删除队列
        //msgctl(msgid,IPC_RMID,0);
}












































Mr-墨云 发表于 2020-2-26 00:04

#include <sys/ipc.h>
#include <sys/msg.h>
你再查一下头文件,Dev编译后无法找到头文件。

absman1972 发表于 2020-2-26 00:21

#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>

這幾個都是linux下的東西,如果你在linux下編譯應該不會有問題
如果你在windows 下編譯,可能要尋找替代方案
比如unistd.h,可以參考
https://blog.csdn.net/yebufan/article/details/5846394

ipc.h
https://github.com/git-for-windows/git-sdk-64/blob/master/usr/include/cygwin/ipc.h

msg.h
https://code.woboq.org/gcc/include/sys/msg.h.html

PS.不保證所有訊息都正確,但希望有幫助到你

abchehead 发表于 2020-2-26 12:06

是linuxcentos系统下编译的;编译的了,但是不能运行,

abchehead 发表于 2020-2-26 12:09

Mr-墨云 发表于 2020-2-26 00:04
#include
#include
你再查一下头文件,Dev编译后无法找到头文件。

我就是编译可以通过,但是运行不了,运行就报错get err:No such file or directory

absman1972 发表于 2020-3-1 23:31

msgid=msgget(key,0/*IPC_CREAT|IPC_EXCL|0666*/);
if(msgid==-1)printf("get err:%m\n"),exit(-1);


抱歉,前面眼花,誤以為是編譯錯誤,鬧了一個大紅臉,請見諒!

重新看了一遍,問題出在msgget
第二個參數設為0,表示:取消息隊列標識符,但此時尚未創建,所以會報錯
(即設為0只能存取已存在的,其他情況要搭配其他參數來使用,類似你註解掉的部分)

可參考
https://dulishu.top/systemv-msgget/

abchehead 发表于 2020-3-2 11:10

absman1972 发表于 2020-3-1 23:31
msgid=msgget(key,0/*IPC_CREAT|IPC_EXCL|0666*/);
if(msgid==-1)printf("get err: ...

谢谢,以解决
页: [1]
查看完整版本: c语言问题