c - 使用 ftok() 创建密钥以及如何使用密钥?
问题描述
我正在对消息队列进行一些编码。
ftoK() 有什么用?
什么是密钥的创建?
钥匙有什么用?
在我的代码中,我使用它作为键“(key_t)1234”,代码运行良好。这个键“(key_t)1234”是什么意思?如何创建自己的密钥?
发件人:
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");
}
}
}
接收者:
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);
}
}
解决方案
首先,我正在对消息队列进行一些编码。ftoK() 和创建密钥有什么用?钥匙有什么用?ftok
阅读它说的手册页
key_t ftok(const char *pathname, int proj_id);
ftok() 函数使用由给定路径名命名的文件的标识(它必须引用现有的、可访问的文件)并且 Today 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
using的代码中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
推荐阅读
- cypress - 赛普拉斯错误:“无法读取未定义的属性‘fs.existsSync’”
- batch-file - 用于编辑 .txt 中特定行的批处理脚本
- python - 在 Python 中格式化 Excel 工作表
- javascript - JavaScript 对象字面量和 Python 字典一样吗?
- .htaccess - 如何将 301 重定向从 A 恢复到 B,而不会导致无限循环
- json - 如何在自定义 ContextualWebSearch 上获取“突发新闻”?
- c++ - 在 VM 上使用 OpenCV 重建 C++ 程序
- kotlin - 如何增加 Kotlin 数据类中的整数字段
- c - -Ofast 的 GCC 问题?
- javascript - 静态类属性的继承