私は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使用法の他の例を確認してください。