[英]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.