我一直在尝试在 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 用法的另一个示例。