繁体   English   中英

ftok:资源暂时不可用

[英]ftok: Resource temporarily unavailable

我正在 c 下开发需要通过共享 memory 进行通信的应用程序。 我需要通过我的应用程序中的某些字段生成密钥,所以我只是将它们转换为 int 并调用 ftok,但它不起作用,我不知道为什么。

导致错误的代码:

int proj_id = 3001; // it's calculated by app, basicly it just convert a few fields into unique int for example 3001
key_t key;
if((key = ftok(".", proj_id)) < 0);
{
   perror("ftok");
   return -1;
}

output:ftok:资源暂时不可用

但我经常遇到这个问题。 你知道为什么以及如何解决它吗? 提前致谢; ;)

错误检查应该是:

if ((key = ftok(".", proj_id)) == (key_t)-1) //... error

负键可以(并且在 Linux 上)有效( https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftok.html )。

您必须得到一个否定键和perror ,然后只打印您拥有的最后一个(不相关的) errno ,在您的情况下恰好是EAGAIN

在 POSIX 规定错误返回-1的大多数情况下, < 0检查就足够了(实际上生成的程序集比== -1检查稍好),因为成功返回的值通常仅限于非负数。 但是,有一些例外情况需要您进行精确的== -1检查,而ftok就是其中之一。

此外,正如KamilCuk指出的那样,使用文件路径而不是目录路径可能会增加代码的可移植性, 因为 ftok 的 posix 规范对于是否允许目录路径似乎有点模棱两可(目录是 Unix 下的“文件”,但尚不清楚规范是否希望术语“文件路径”也包含目录路径)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM