1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 /** 20 * @file sys/statvfs.h 21 * @brief Filesystem statistics. 22 */ 23 24 #include <stdint.h> 25 #include <sys/cdefs.h> 26 #include <sys/types.h> 27 28 __BEGIN_DECLS 29 30 #define __STATVFS64_BODY \ 31 /** Block size. */ \ 32 unsigned long f_bsize; \ 33 /** Fragment size. */ \ 34 unsigned long f_frsize; \ 35 /** Total size of filesystem in `f_frsize` blocks. */ \ 36 fsblkcnt_t f_blocks; \ 37 /** Number of free blocks. */ \ 38 fsblkcnt_t f_bfree; \ 39 /** Number of free blocks for non-root. */ \ 40 fsblkcnt_t f_bavail; \ 41 /** Number of inodes. */ \ 42 fsfilcnt_t f_files; \ 43 /** Number of free inodes. */ \ 44 fsfilcnt_t f_ffree; \ 45 /** Number of free inodes for non-root. */ \ 46 fsfilcnt_t f_favail; \ 47 /** Filesystem id. */ \ 48 unsigned long f_fsid; \ 49 /** Mount flags. (See `ST_` constants.) */ \ 50 unsigned long f_flag; \ 51 /** Maximum filename length. */ \ 52 unsigned long f_namemax; \ 53 54 #if defined(__LP64__) 55 #define __STATVFS64_CODA uint32_t __f_reserved[6]; 56 #else 57 #define __STATVFS64_CODA 58 #endif 59 60 struct statvfs { __STATVFS64_BODY __STATVFS64_CODA }; 61 62 struct statvfs64 { __STATVFS64_BODY __STATVFS64_CODA }; 63 64 /** Flag for `f_flag` in `struct statvfs`: mounted read-only. */ 65 #define ST_RDONLY 0x0001 66 67 /** Flag for `f_flag` in `struct statvfs`: setuid/setgid ignored. */ 68 #define ST_NOSUID 0x0002 69 70 /** Flag for `f_flag` in `struct statvfs`: access to device files disallowed. */ 71 #define ST_NODEV 0x0004 72 73 /** Flag for `f_flag` in `struct statvfs`: execution disallowed. */ 74 #define ST_NOEXEC 0x0008 75 76 /** Flag for `f_flag` in `struct statvfs`: writes synced immediately. */ 77 #define ST_SYNCHRONOUS 0x0010 78 79 /** Flag for `f_flag` in `struct statvfs`: mandatory locking permitted. */ 80 #define ST_MANDLOCK 0x0040 81 82 /** Flag for `f_flag` in `struct statvfs`: access times not updated. */ 83 #define ST_NOATIME 0x0400 84 85 /** Flag for `f_flag` in `struct statvfs`: directory access times not updated. */ 86 #define ST_NODIRATIME 0x0800 87 88 /** Flag for `f_flag` in `struct statvfs`: see `MS_RELATIME`. */ 89 #define ST_RELATIME 0x1000 90 91 /** Flag for `f_flag` in `struct statvfs`: don't follow symlinks. */ 92 #define ST_NOSYMFOLLOW 0x2000 93 94 /** 95 * [statvfs(3)](http://man7.org/linux/man-pages/man3/statvfs.3.html) 96 * queries filesystem statistics for the given path. 97 * 98 * Returns 0 on success, and returns -1 and sets `errno` on failure. 99 */ 100 int statvfs(const char* _Nonnull __path, struct statvfs* _Nonnull __buf); 101 102 /** 103 * [fstatvfs(3)](http://man7.org/linux/man-pages/man3/fstatvfs.3.html) 104 * queries filesystem statistics for the given file descriptor. 105 * 106 * Returns 0 on success, and returns -1 and sets `errno` on failure. 107 */ 108 int fstatvfs(int __fd, struct statvfs* _Nonnull __buf); 109 110 /** Equivalent to statvfs() . */ 111 int statvfs64(const char* _Nonnull __path, struct statvfs64* _Nonnull __buf); 112 113 /** Equivalent to fstatvfs(). */ 114 int fstatvfs64(int __fd, struct statvfs64* _Nonnull __buf); 115 116 __END_DECLS 117