使用ftok()创建密钥以及如何使用密钥?

时间:2018-04-30 08:05:14

标签: c data-structures message-queue embedded-linux

我正在对消息队列进行一些编码 ftoK()的用途是什么? 什么是钥匙的创造?
钥匙有什么用?
在我的代码中我使用它作为键“(key_t)1234”,代码运行正常。 这个键的意思是什么(“key_t)1234”? 我如何创建自己的密钥?

SENDER:

struct mesg_q
{
    char msg_txt[100];
    long msg_typ;
};

int main()
{
    int msgid;
    //key_t msg_key;
    char buffer[100]; 

    struct mesg_q msgq;
    msgid=msgget((key_t)1234, 0666 | IPC_CREAT);

    if(msgid== -1)
    {    
        printf("msgget failed\n");
        return -1;
    }

    while(1)
    { 
        printf("Text Message\n");
        fgets(msgq.msg_txt,100,stdin);

        if(msgsnd(msgid,&msgq,100,0)==-1)
        {
            printf("Send failed\n");
            return -1;
        }  
        else
        {
            printf("Message send\n");
        }    
    }   
}    

RECEIVER:

struct mesg_q
{
    char msg_txt[100];
    long msg_typ;
};

int main()
{
    int msgid;
    char buffer[100];
    long int rec_buff=0;
    key_t key;
    struct mesg_q msgq;
    msgid=msgget((key_t)1234, 0666 | IPC_CREAT);

    if(msgid == -1)
    {
        printf("Msgget failed\n");
        return -1;
    }

    while(1)
    {
        if(msgrcv(msgid,&msgq,100,rec_buff,0)==-1)
        {
            printf("Mesg recv failed\n");
            return -1;
        }
        else
        {
            printf("Mesg Recvd\n");
        }
        printf("Recvd mesg=%s\n",msgq.msg_txt);
    }     
}

1 个答案:

答案 0 :(得分:1)

首先,我正在对消息队列进行一些编码。 ftoK()的用途是什么 并创建密钥?密钥有什么用?阅读手册页ftok它说

key_t ftok(const char *pathname, int proj_id);
     

ftok()函数使用给定名称的文件的标识   pathname(必须引用          现有的,可访问的文件)今天proj_id是一个int,但仍然只使用8位。典型用法具有ASCII字符          proj_id,这就是为什么当proj_id为零时,行为被认为是未定义的。

ftok要求file存在,因为它使用该文件的inode information来创建key

其次,这个键的含义“(key_t)1234”?检查msgget()第一个争论,它是key_t类型和1234是不是key_t类型,它是一个整数,因此您将其类型转换为key_t类型。

在您的代码中,您没有使用key创建ftok(),您可以创建它。

key_t key;
key = ftok("file.c", 'b'));/*instead of taking random 1234, you are generating key from file based on proj_id */
msgid=msgget(key_t, 0666 | IPC_CREAT);

密钥有什么用? key是除message queue id之外在内核中标识消息队列的标识符之一。在命令行上运行ipcs -q&检查。

请参阅此Whats is purpose ftok in Message queues