C言語でディスク(HDD)の残り容量を測定してプログラムを自動停止する方法
数値計算でファイルにデータを大量に書き出すと,いっぱいになってマシンがフリーズすることがある. そこで,ディスクの残り容量を取得して,指定MB以下で自動停止させるサブルーチンを作成してみた.
ヘッダーファイル:
// // checkDiskSize.h // ディスクの容量をチェックして,空き容量が少ないときは終了させるルーチン. // // Created by 8ttyan on 2016/01/31. // // #ifndef ____checkDiskSize__ #define ____checkDiskSize__ #include <stdio.h> #include <stdlib.h> #include <string.h> double checkDiskSize(int); // checkDiskSize(空容量が何MB以下で停止させるかを指定); // 戻り値は空き容量の割合(0.0-1.0) #endif /* defined(____checkDiskSize__) */
プログラムファイル:
// // checkDiskSize.c // // // Created by 8ttyan on 2016/01/31. // // #include "checkDiskSize.h" double checkDiskSize(int threthold) { FILE *pipe; // パイプ用ストリーム char results[1024]; // コマンドの実行結果 int vacant; // 空き容量をMBで char command[1024]="/bin/df -m | /usr/bin/awk '{if($9 == \"/\"){print $4}}'"; // コマンド文字列作成.MB単位で残り容量を得る if((pipe = popen(command, "r")) == NULL) { // コマンド実行 pclose(pipe); // パイプを閉じる return -1.0; } while (fgets(results, 1024, pipe) != NULL); // 実行結果取得 pclose(pipe); // パイプを閉じる sscanf(results, "%d\n", &vacant); // 文字列を数値に変換 if (vacant < threthold) { // 指定容量を下回った場合 printf("checkDiskSize() : Less disk capacity! ディスク容量が足りません!\n"); // 標準出力に表示 fflush(stdout); // フラッシュする exit(EXIT_FAILURE); // プログラムを終了する } return vacant; }
メインファイル内での使用例:
#include <stdio.h> #include "checkDiskSize.h" int main() { printf("現在のディスク空きは%f%%です.\n", checkDiskSize(1024)*100); // 空き容量が1024MBを下回る場合にはプログラム終了.下回らない場合には,空き容量の全体に占める割合を表示 return 0; }
何度もファイルを書き出すプログラムの場合,このような処理をファイル書き出しのたびに行うと,ディスクがパンパンになるのを防ぐ事が出来る.