- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在对消息队列进行一些编码。
ftoK()有什么用?
什么是 key 创建?
key 有什么用?
在我的代码中,我使用它作为键“(key_t)1234”,代码运行良好。这个键“(key_t)1234”的含义是什么?我如何创建自己的 key ?
发件人:
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()有什么用和 key 的创建? key 有什么用? 阅读手册页 ftok
它说
key_t ftok(const char *pathname, int proj_id);
The ftok() function uses the identity of the file named by the given pathname (which must refer to an existing, accessible file) and Today proj_id is an int, but still only 8 bits are used. Typical usage has an ASCII character proj_id, that is why the behavior is said to be undefined when proj_id is zero.
ftok
要求文件
存在,因为它使用该文件的inode信息
来创建 key
.
其次,这个键“(key_t)1234”的含义是什么?检查msgget()
第一个参数,它是key_t
类型,并且 1234
不是 key_t
类型,它是一个整数,因此您将其类型转换为 key_t
类型。
在您的代码中,您没有使用 ftok()
创建key
,您可以像这样创建它。
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有什么用? key
是除了消息队列id
之外,内核中标识消息队列的标识符之一。在命令行上运行 ipcs -q
并检查。
关于c - 使用ftok()创建 key 以及如何使用 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50096350/
key_t ftok(const char *pathname, int proj_id); 如果我使用文件名作为第一个参数而不是路径名会怎样?例如我的程序在以下目录/afs/edu/id/group
我正在使用 ftok() 为 C 应用程序使用的共享内存段生成标识符。我有问题,在一个盒子上我与 root 使用的标识符发生冲突。在这种情况下,我可以通过破解代码来修复它,但我想要一个更强大的解决方案
我已经开始阅读 Linux 上的 IPC 机制之一的消息队列。但在第一步,我有一些非常基本的问题。 使用ftok()生成唯一ID( key )以及要生成的唯一ID是什么。 我们不能使用简单的数字来获取
我在系统中有一个现有代码,它使用 ftok() 根据文件名和传递给它的零生成 key 。该代码在 32 位上运行良好,但在移动到 64 位时开始随机提示。经过更多研究,我发现这主要是因为较低的有效位为
在ftok()手册中有提到 key_t ftok(const char *pathname, int proj_id); ftok() 函数使用由给定路径名命名的文件的标识(必须引用现有的可访问文件)
我对 ftok() 和 IPC_PRIVATE 生成的 key 有一些疑问。 当我调用 fork() 时, key IPC_PRIVATE 自动由父子共享。对吧? 当我调用 fork() 时,ftok
我正在学习 IPC 编程。作为其中的一部分,我尝试了以下两个代码来了解消息队列.... 消息队列创建者或消息发送者 struct my_msgbuf { long mtype; cha
用于生成 ftok() 生成的 key 的公式是什么? ftok 是一个 Linux 函数,用于为 SYSTEM V IPC 创建 key 。 最佳答案 在ftok from glibc 2.29 :
我遇到了 following program在客户端和服务器之间实现共享内存 IPC。 以下行用于生成唯一的 sysv key (如 here 所述): ShmKEY = ftok(".", 'x')
第二个参数proj_id。这是什么? #include #include key_t ftok (const char *pathname, int proj_id); 最佳答案 关于 ftok
我正在使用 ftok() 创建共享内存 key 。我想创建 500 个共享内存 key 。根据 ftok() 的手册页,提到低 8 位是重要的。 是不是意味着我们最多只能生成256个share mem
我是一名优秀的程序员,十分优秀!