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

관련 정보