LinuxのCプログラムでUSBフラッシュドライブの空き容量を知りたいです。以前はこの問題を解決しようとしましたが、system("df -h /dev/sda1")
Linux Cアプリケーションでシステムコマンドを使用すると、いくつかのタイミングの問題が発生しました。したがって、利用可能な空き容量を確認するには、さまざまな種類のシステムコール/ライブラリ機能を使用する方法を知る必要があります。
答え1
マウントされたUSBフラッシュドライブの場合は、次のことができます。統計ファイルシステム(3)関数を使用するには、マウントポイントへのパスを指定する必要があり、デフォルトでは小さなバージョンがありますdf
(ただし、マウントされたファイルシステムでのみ実行されます)。
$ cat fs_usage.c
#include <stdio.h>
#include <sys/statvfs.h>
int main(int argc, char **argv){
struct statvfs fs_usage;
statvfs(argv[1],&fs_usage);
printf("%s:%f bytes available, %f bytes used\n",argv[1],
fs_usage.f_frsize*(double)fs_usage.f_bavail,
fs_usage.f_frsize * (double)(fs_usage.f_blocks - fs_usage.f_bfree));
return 0;
}
$ gcc fs_usage.c -o fs_usage
$ df -B 1 /mnt/ubuntu
Filesystem 1B-blocks Used Available Use% Mounted on
/dev/sdb1 118013599744 105134329856 6860865536 94% /mnt/ubuntu
$ ./fs_usage /mnt/ubuntu/
/mnt/ubuntu/:6860865536.000000 bytes available, 105134329856.000000 bytes used
また、引数の1つとして、ファイルシステム内のすべてのファイルへのパス名にすることもできます。たとえば、statvfs()
ファイルシステムのパーティションではなくファイルシステムの使用量が返されます(実際には仮想ファイルシステムの1つであるため)。デバイス。const char *path
/dev/sda7
/dev
sda7
f_frsize
ここでは同等のものを使用していますが、f_bsize
一部のファイルシステムでは、フラグメントサイズがブロックサイズより小さい場合があります。バラよりhttps://unix.stackexchange.com/a/463370/85039詳細
Cライブラリ(通常はglibcですが、組み込みプラットフォームでは他のものかもしれません)がstatvfs(3)を遅すぎる方法で実装している場合は、おそらくデフォルトライブラリを使用する必要があります。statfs(2) または fstatfs(2)代わりに直接システムコールをしてください。