statfs 예제

프로그램은 파일 또는 디렉터리로 의한 경로를 수락하고 해당 파일 시스템에서 사용 가능한 공간을 보고할 수 있습니다. 몇 가지 예는 다음과 같습니다. 여기서 위의 C++ 프로그램은 GetAvailableSpace에 빌드됩니다. 프로그램이 디스크의 파일 시스템에 있는 파일에 쓰는 것이 일반적입니다. 그러나 프로그램이 디스크의 파일 시스템에 기록할 때 디스크가 거의 가득 찼다면 어떨까요? 시스템 소프트웨어 및 미션 크리티컬 프로그램의 경우 실제로 파일에 쓰기 전에 사용 가능한 파일 시스템 공간을 확인하는 것이 더 좋거나 해야 할 일입니다. POSIX OS에서는 파일 시스템 통계를 얻기 위해 statvfs POSIX API를 사용합니다 (Linux에서는 Linux 특정 통계를 사용할 수 있지만 POSIX API는 이식성에 더 좋습니다). 이 게시물에서는 statvfs API를 사용하여 사용 가능한 파일 시스템 공간을 얻는 C 함수와 C++ 예제를 소개합니다. 위의 GetAvailableSpace 함수를 사용하면 C++의 전체 예제는 다음과 같습니다. . 원래 Linux statfs() 및 fstatfs() 시스템 호출은 매우 큰 파일 크기를 염두에 두고 설계되지 않았습니다. 그 후, 리눅스 2.6 새로운 statfs64() 및 fstatfs64() 새로운 구조를 사용 하는 시스템 호출 추가, statfs64.

새 구조에는 원래 statfs 구조와 동일한 필드가 포함되어 있지만 큰 파일 크기를 수용하기 위해 다양한 필드의 크기가 증가합니다. glibc statfs() 및 fstatfs() 래퍼 함수는 커널 차이를 투명하게 처리합니다. . . . 파일 시스템의 총 블록 수입니다. 이는 유닉스 statvfs.f_blocks 필드에 해당합니다. errno 전역 변수는 디코딩할 오류 값을 가져오는 데 사용됩니다. 일반적인 아이디어는 f_fsid 쌍 (f_fsid,ino)이 고유하게 파일을 결정하는 몇 가지 임의의 물건을 포함하고 있다는 것입니다.

일부 운영 팀은 장치 번호 또는 장치 번호를 파일 시스템 유형과 결합하여 사용합니다. 이 필드는 NFS 내보낼 때 파일 시스템의 파일 핸들에 사용되기 때문에 여러 개의 OS가 f_fsid 필드를 수퍼 유저에게만 제공 (및 권한이 없는 사용자에 대해서만 0)을 제공하는 것을 제한하고 이를 제공하는 것은 보안 문제입니다. . . 함수 statfs()는 탑재된 파일 시스템에 대한 정보를 반환합니다. 경로는 마운트된 파일 시스템 내의 모든 파일의 경로 이름입니다. buf는 대략 다음과 같이 정의된 statfs 구조에 대한 포인터입니다: explain_statfs 함수는 statfs(2) 시스템 호출에 의해 반환된 오류에 대한 설명을 얻기 위해 사용됩니다. 메시지에 포함되는 최소 값은 strerror(errno)의 값이지만 일반적으로 훨씬 더 잘 수행되며 근본 원인을 더 자세히 나타냅니다. 디렉터리가 있어야 합니다. 그렇지 않으면 다음과 같은 오류가 보고됩니다. 이 메서드는 API 수준 18에서 더 이상 사용되지 않습니다.

대신 getAvailable블록롱()을 사용합니다. 예약된 블록(일반 응용 프로그램에서는 사용할 수 없음)을 포함하여 파일 시스템에서 사용 가능한 총 블록 수입니다.