나는 현재 사용자의 디스크 할당량을 초과하는 시도가 실패했다는 것을 나타내는 EDQUOT 오류의 발생을 감지하는 UNIX에서 Windows로 일부 C++ 코드를 이식하고 있습니다. Visual Studio의 <errno.h>에는 디스크 할당량 기능이 있다는 것을 알고 있지만 EDQUOT가 없습니다. Visual Studio의 <errno.h> 에는 ENOSPC가 있습니다. 이는 UNIX가 EDQUOT으로 표현하는 것을 CRT가 표현하는 방식 일 수 있습니다. 아무도이 이론을 확인하거나 부정 할 수 있습니까? 그리고 이것이 이것을 처리 할 방법이 아니라면 무엇입니까?EDQUOT에 해당하는 Windows가 있습니까?
2
A
답변
2
C : \ 프로그램 파일 \은 Microsoft SDKs \ 윈도우 \ v7.1을의 \ \ WinSock.h
포함 : \ 프로그램 파일 \은 Microsoft SDKs \ 윈도우 \ v7.0A \는 \ WinSock.hC가 포함
#if 0
#define EDQUOT WSAEDQUOT
#endif
C : \ 프로그램 파일 \은 Microsoft SDKs \ 윈도우 \ v7.1을의 \ \ WINERROR.H
포함 : \ 프로그램 파일 \은 Microsoft SDKs \ 윈도우 \ v7.0A \는 \ WINERROR.HC가 포함
//
// MessageId: WSAEDQUOT
//
// MessageText:
//
// Ran out of disk quota.
//
#define WSAEDQUOT 10069L
런타임 라이브러리 소스는 놀랍지 않게 '쓰기'에서 정확히 한 곳에서 생산되는 ENOSPC를 보여줍니다. Windows 시스템 호출 WriteFile이 바이트를 쓰지 못하면 세 가지 분기 중 하나가 발생합니다. –
Win32 오류가 있으면 매핑되고 반환됩니다. NT_STATUS_QUOTA_EXCEEDED가 EDQUOT에 맵핑 될 것을 기대할 수 있습니다. 두 번째 분기는 장치에 관한 것으로 무시할 수 있습니다. 세 번째 가지는 ENOSPC을 생성하는 다른 모든 것입니다. –
NT_STATUS_QUOTA_EXCEEDED에 대한 위의 내 의견을 무시하십시오. 이는 커널 오류 코드 여야하며 Win32 오류 코드는 아닙니다. Win32 수준에서 모든 종류의 할당량 관련 오류 코드가 있으며, 어떤 상황에서 어떤 코드가 표시되는지 확인하는 코드를 작성해야하므로 CRT에 어떤 영향이 미칠 수 있는지 파악할 수 있습니다. . 한 가지 염려하는 점은 CRT가 디스크 할당량 오류를 무엇이든 매핑하지 않고 EINVAL로 떨어지는 것입니다. –