エラー:getrlimit(RLIMIT_CORE):操作は許可されていません。組み込みLinux環境のProftpd

エラー:getrlimit(RLIMIT_CORE):操作は許可されていません。組み込みLinux環境のProftpd

私はArm7 Embedded Linuxでproftpdを使用しようとしてきました。

実行が開始されると、次のメッセージが転送されます。

error: getrlimit(RLIMIT_CORE): Operation not permitted

Proftpfのバージョンは1.3.4bです。 getrlimitが失敗する原因が何であるかについての手がかりはありますか?

とても感謝しています。

答え1

私の場合、ビルド構成で有効になっている大容量ファイルのサポートにより、EPERMエラーが発生しました。それが原因になった_FILE_OFFSET_BITSが定義されているため、64呼び出しgetrlimit()は実際にgetrlimit64()失敗した呼び出しになります(下記参照)。大容量ファイルのサポートを無効にすると問題が解決しました。私は組み込みARMアプリケーションを開発していますので、大容量ファイルのサポートを無効にしても大きな問題にならないことを願っています。

半年後のアップデート:

組み込みシステムでも(ハードウェアレジスタにアクセスするために)2GB以上のアドレスをmmap()するには、大容量ファイルのサポートが必要であることがわかりました。これを許可しますが、getrlimitの代わりにgetrlimit64呼び出しを避けるためにプロジェクト全体に_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()

しかし、EPERMでgetrlimit64()が失敗する理由は次のとおりです。

上記の元の質問に対するGillesのコメントによると、これは私のlibcが「実装されていない」エラーを返す方法かもしれません。これを見てワイヤー同じEPERM使用法の他の例を確認してください。

関連情報