LinuxのCプログラムでUSBフラッシュドライブの空き容量を確認したいのですが。私は以前にそれを理解するためにsystem("df -h /dev/sda1")
を使用しましたが、Linux Cアプリケーションでシステムコマンドを使用すると、いくつかのタイミングの問題が発生します。したがって、他の種類のシステムコール/ライブラリ関数を使用して利用可能な空き領域を判断する方法を知る必要があります。
マウントされたUSBフラッシュドライブの場合、これは statvfs(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
_
また、statvfs()
は_const char *path
_をパラメーターの1つとして受け取り、ファイルシステム内の任意のファイルのパス名にすることができます。 _/dev/sda7
_は、デバイスの_/dev
_パーティションではなく、_sda7
_ファイルシステム(実際には仮想ファイルシステムの1つであるため)の使用法を返します。
ここでは_f_frsize
_を使用していますが、これは_f_bsize
_と同等ですが、一部のファイルシステムでは、フラグメントサイズがブロックサイズよりも小さい場合があります。詳細は https://unix.stackexchange.com/a/463370/85039 を参照してください