다음을 통해 공유


_getdiskfree

_diskfree_t 구조체를 생산하기 위하여 디스크 드라이브에 대한 정보를 사용합니다.

중요

이 API는 Windows 런타임에서 실행되는 응용 프로그램에서 사용할 수 없습니다.자세한 내용은 /ZW에서 지원하지 않는 CRT 함수를 참조하십시오.

unsigned _getdiskfree(
   unsigned drive,
   struct _diskfree_t * driveinfo
);

매개 변수

  • [in] drive
    정보를 표시할 디스크 드라이브입니다.

  • [out] driveinfo
    _diskfree_t 구조체는 드라이브에 대한 정보로 채워집니다.

반환 값

함수가 성공할 경우에는 0이 반환됩니다. 함수가 실패하면 반환 값은 오류 코드입니다. 운영 체제에서 반환되는 모든 오류에 대해 errno 값이 설정됩니다. errno에 의해 표시되는 오류 조건에 대한 자세한 내용은, errno 상수를 참조하십시오.

설명

_diskfree_t 구조체는 Direct.h에 정의되어 있습니다.

struct _diskfree_t { 
   unsigned total_clusters; 
   unsigned avail_clusters; 
   unsigned sectors_per_cluster; 
   unsigned bytes_per_sector; 
};

이 함수는 해당 매개 변수의 유효성을 검사합니다. driveinfo 포인터가 NULL인 경우 또는 drive가 잘못된 드라이브를 지정한 경우, 매개 변수 유효성 검사에 설명된대로 이 함수는 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우, 함수는 EINVAL 를 반환하고 errno 을 EINVAL으로 설정합니다. 유효한 드라이브 범위는 0부터 26까지입니다. 0의 drive 값은 현재 드라이브를 지정합니다. 그 이후 숫자는 1이 A 드라이브, 3이 C 드라이브 등을 가리키는 것과 같이 영어 알파벳 문자를 매핑합니다.

  • total_clusters
    디스크의 사용되었고 사용할 수 있는 클러스터의 총 수입니다.

  • avail_clusters
    디스크의 사용되지 않은 클러스터 수입니다.

  • sectors_per_cluster
    각 클러스터의 섹터 수입니다.

  • bytes_per_sector
    바이트 내 각 섹터의 크기입니다.

요구 사항

루틴

필수 헤더

_getdiskfree

<direct.h>

호환성에 대한 자세한 내용은 호환성을 참조하십시오.

예제

// crt_getdiskfree.c
// compile with: /c
#include <windows.h>
#include <direct.h>
#include <stdio.h>
#include <tchar.h>

TCHAR   g_szBorder[] = _T("======================================================================\n");
TCHAR   g_szTitle1[] = _T("|DRIVE|TOTAL CLUSTERS|AVAIL CLUSTERS|SECTORS / CLUSTER|BYTES / SECTOR|\n");
TCHAR   g_szTitle2[] = _T("|=====|==============|==============|=================|==============|\n");
TCHAR   g_szLine[]   = _T("|  A: |              |              |                 |              |\n");

void utoiRightJustified(TCHAR* szLeft, TCHAR* szRight, unsigned uVal);

int main(int argc, char* argv[]) {
   TCHAR szMsg[4200];
   struct _diskfree_t df = {0};
   ULONG uDriveMask = _getdrives();
   unsigned uErr, uLen, uDrive;

   printf(g_szBorder);
   printf(g_szTitle1);
   printf(g_szTitle2);

   for (uDrive=1; uDrive<=26; ++uDrive) {
      if (uDriveMask & 1) {
         uErr = _getdiskfree(uDrive, &df);
         memcpy(szMsg, g_szLine, sizeof(g_szLine));
         szMsg[3] = uDrive + 'A' - 1;

         if (uErr == 0) {
            utoiRightJustified(szMsg+8,  szMsg+19, df.total_clusters);
            utoiRightJustified(szMsg+23, szMsg+34, df.avail_clusters);
            utoiRightJustified(szMsg+38, szMsg+52, df.sectors_per_cluster);
            utoiRightJustified(szMsg+56, szMsg+67, df.bytes_per_sector);
         }
         else {
            uLen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
                            uErr, 0, szMsg+8, 4100, NULL);
            szMsg[uLen+6] = ' ';
            szMsg[uLen+7] = ' ';
            szMsg[uLen+8] = ' ';
         }

         printf(szMsg);
      }

      uDriveMask >>= 1;
   }

   printf(g_szBorder);
}

void utoiRightJustified(TCHAR* szLeft, TCHAR* szRight, unsigned uVal) {
   TCHAR* szCur = szRight;
   int nComma = 0;

   if (uVal) {
      while (uVal && (szCur >= szLeft)) {
         if   (nComma == 3) {
            *szCur = ',';
            nComma = 0;
         }
         else {
            *szCur = (uVal % 10) | 0x30;
            uVal /= 10;
            ++nComma;
         }

         --szCur;
      }
   }
   else {
      *szCur = '0';
      --szCur;
   }

   if (uVal) {
      szCur = szLeft;

      while   (szCur <= szRight) {
         *szCur = '*';
         ++szCur;
      }
   }
}
  

해당 .NET Framework 항목

해당 사항 없음. 표준 C 함수를 호출하려면 PInvoke를 사용합니다. 자세한 내용은 플랫폼 호출 예제을 참조하십시오.

참고 항목

참조

디렉터리 제어