저는 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 사용법의 다른 예를 확인하세요.