错误:getrlimit(RLIMIT_CORE):不允许操作。嵌入式 Linux 环境下的 Proftpd

错误:getrlimit(RLIMIT_CORE):不允许操作。嵌入式 Linux 环境下的 Proftpd

我一直在尝试在 Arm7 嵌入式 Linux 上使用 proftpd。

开始执行后,它会传递以下消息:

error: getrlimit(RLIMIT_CORE): Operation not permitted

Proftpf 版本是 1.3.4b。关于可能导致 getrlimit 失败的任何线索?

非常感谢。

答案1

就我而言,EPERM 错误是由构建配置中启用的大文件支持引起的。它引起了_FILE_OFFSET_BITS被定义为64,因此getrlimit()call 实际上变成了一个getrlimit64()失败的调用(见下文)。禁用大文件支持解决了该问题。我正在开发嵌入式 ARM 应用程序,因此希望禁用大文件支持不会对我造成太大伤害。

半年后更新:

事实证明,即使在嵌入式系统上,我也需要大文件支持,以便能够使用地址 > 2GB 的 mmap() (以访问硬件寄存器)。为了允许这一点,但仍然避免调用 getrlimit64 而不是 getrlimit,我定义了 _FILE_OFFSET_BITS=64 项目范围,并且在我调用 getrlimit 的单个单元中,我在包含之前重新定义了 _FILE_OFFSET_BITS <sys/resource.h>

#if _FILE_OFFSET_BITS == 64
# undef _FILE_OFFSET_BITS
# define _FILE_OFFSET_BITS 32
#endif
#include <sys/resource.h> 
//...
//call getrlimit()

但为什么 getrlimit64() 在 EPERM 上失败:

根据 Gilles 对上述原始问题的评论,这可能是我的 libc 返回“未实现”错误的一种方式。看到这个线查看相同 EPERM 用法的另一个示例。

相关内容