问题标签 [ftok]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
398 浏览

linux - 为可以具有多个实例的应用程序的消息队列创建唯一键

我制作了一个 Linux CUI 应用程序,它通过消息队列在进程之间进行通信。

只要是单例就没有问题。但是,当同一个应用程序有多个实例时,队列中的消息会被发送到错误的实例。

我知道这可以通过给 msgget 函数一个唯一的键来避免。使用 ftok() 创建密钥,但由于变量相同,它们会产生相同的密钥。

有人可以指导我如何为每个实例设置一个唯一的密钥吗?

我现在唯一的想法是随机分配给 ftok 的变量,我知道这不可能。

0 投票
4 回答
10887 浏览

c - 我应该将哪个文件作为 ftok() 的路径名参数传递

它在 ftok() 手册中提到

ftok() 函数使用由给定路径名命名的文件的标识(必须引用现有的、可访问的文件) ...

我很困惑const char *pathname

最好的做法是什么?在我当前的系统上,我可以通过"/home/Andrew/anyfile",但我的程序必须在其上运行的其他系统不可能有这个文件。

我如何使用"/etc/hosts/"或者"/etc/inittab"因为我确信所有这样的系统都会有这两个文件?这是个好主意吗?它会引起任何问题吗?

我不想要求用户在执行时输入文件名或将文件名作为命令行参数传递。

还有其他不同的更好的决定方式pathname吗?
哪种方式是最好和最可靠的?

谢谢你的时间。

0 投票
3 回答
23838 浏览

c - 如果访问共享内存的关键是 shmget() 的返回值,那么拥有 key_t 有什么意义?

使用共享内存时,为什么要关心创建密钥

在下面的代码中?

据我了解,访问给定共享内存所需的是shmid,而不是关键。还是我错了?如果我们需要的是shmid,那么不只是每次都创建一个随机密钥有什么意义呢?

编辑

@Beej的 Unix IPC 指南可以阅读:

这种key胡说八道怎么办?我们如何创建一个?好吧,因为类型 key_t实际上只是 a long,所以你可以使用任何你想要的数字。但是,如果您对号码进行硬编码,而其他一些不相关的程序硬编码相同的号码但想要另一个队列怎么办?解决方案是使用ftok() 从两个参数生成密钥的函数。

读到这里,给我的印象是,需要附加到共享内存块上的是关键。但这不是真的,不是吗?

0 投票
2 回答
2662 浏览

c - ftok() 冲突

我正在使用ftok()为 C 应用程序使用的共享内存段生成标识符。我遇到了问题,在一个盒子上我与 root 使用的标识符发生冲突。在这种情况下,我可以通过破解代码来修复它,但我想要一个更强大的解决方案。

应用程序安装到它自己的逻辑卷中,提供给 ftok 的路径是应用程序的二进制目录(在该 lv 内)。提供的 ID 从 1 开始,通常有六个左右。

我已经追踪到 ftok 会做这样的事情:

st.st_dev / st.st_ino 的组合应该是非常独特的。但是我在许多盒子中看到,st_dev 的最低有效位通常为 0(即 st_dev 数字通常是 256 的倍数)。而且由于二进制目录位于逻辑卷中,因此无法保证 inode 编号与 root 使用的编号不同。

有没有解决这个问题的好方法 - 一个更好的 ftok 替代方案,或者一种设置机器的方法,以便 st_dev 数字对 ftok 更有用?

0 投票
3 回答
22879 浏览

c - 消息队列中的用途 ftok 是什么

我已经开始阅读 Linux 上 IPC 机制之一的消息队列。但在第一步我有一些非常基本的问题。

  1. 用于ftok()生成唯一 ID(密钥)以及要生成的唯一 ID 是什么。

  2. 我们不能使用简单的数字而不是使用来获取我们的密钥ftok()吗?

  3. key函数中参数的目的是什么msget

    /li>
  4. msqid和 和有什么不一样key

0 投票
4 回答
10102 浏览

c - 使用 C 理解共享内存

使用 C,我正在尝试设置共享内存。我的代码如下所示:

但是,当我运行最后一行时,我遇到了分段错误。调试时,我可以打印“sharedval”,我得到一个内存地址,大概是我得到的内存中的位置。所以我会假设我所要做的就是用*sharedval它来评估它,但显然不是。我应该如何从共享内存中读取?朝着正确的方向前进会很棒。谢谢!

编辑:

another.anon.coward 的输出:

0 投票
1 回答
809 浏览

c - 如何确定ftok共享内存冲突

我正在尝试调试一些遗留代码的问题。在试图理解我在看什么时,我发现它使用ftok. 我在网上查看了它的作用,偶然发现了这个链接。我看得更深,发现ftok不能保证唯一的键,并且空间可能会发生冲突的可能性很小。

ftok() 冲突

所以,我一直在努力确定这是否适合我。如何确定是否真的是共享内存空间冲突问题?这可能是遗留可执行文件中可怕的内存泄漏......

0 投票
2 回答
10744 浏览

c - msgget() 和 ftok() 出错

我正在学习 IPC 编程。作为其中的一部分,我尝试了以下两个代码来了解消息队列......

消息队列创建者或消息发送者

消息接收者

以上代码可以在beej 的消息队列指南中找到。

当我尝试执行“spock”​​时,msgget() 抛出错误:没有这样的文件或目录。ftok() 有什么问题吗?我将文件的权限更改为传递给 msgget() 函数的权限。但同样的错误。提前致谢。提前致谢。

0 投票
0 回答
67 浏览

c - 线程中的多个键

对于我的程序,当客户端加入由服务器创建的 MQ 时,服务器会启动一个线程,并在该线程中创建一个私有 MQ,只有一个特定的客户端拥有该 MQ 的密钥。

当我创建一个密钥时,因为它是众多密钥之一,它是否必须有一个特殊的名称?或者我可以在打电话时使用同一个ftok()吗?

示例代码:

或者我必须key_t为每个线程制作一个数组,一个不同的键?

并且keyT=ftok("server.c", 'B');在您使用它时会创建相同的密钥吗?

0 投票
1 回答
513 浏览

c - ftok 路径名与文件名

如果我对第一个参数使用文件名而不是路径名怎么办?比如我的程序在以下目录 /afs/edu/id/group/a/ftok_test.c

在这种情况下,如果我使用

这两者有什么区别?