ftok:资源暂时不可用
ftok: Resource temporarily unavailable
我正在用 c 语言开发需要通过共享内存进行通信的应用程序。我需要通过我的应用程序中的某些字段生成密钥,所以我只是将它们转换为 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;
}
输出: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 points out, using a file path as opposed to a directory path might increase your code's portability as the posix spec for ftok 似乎有点模棱两可,关于是否允许目录路径(目录在 Unixes 下是 "files",但不清楚规范是否需要术语 "file path" 也包含目录路径)。
我正在用 c 语言开发需要通过共享内存进行通信的应用程序。我需要通过我的应用程序中的某些字段生成密钥,所以我只是将它们转换为 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;
}
输出: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 points out, using a file path as opposed to a directory path might increase your code's portability as the posix spec for ftok 似乎有点模棱两可,关于是否允许目录路径(目录在 Unixes 下是 "files",但不清楚规范是否需要术语 "file path" 也包含目录路径)。