Programming
⏱️ 読了時間: 約6

C言語学習記:セキュリティとスマート農業を繋ぐ「最強の基礎力」

C言語学習記:セキュリティとスマート農業を繋ぐ「最強の基礎力」

プログラミングの「登竜門」とも言われるC言語。

最近、セキュリティの勉強を進める中でその重要性を痛感し、以前から興味のあったスマート農業とも密接な関係があるということで、本格的に学習を始めました。


C language, Security, and Smart Agriculture

C language, Security, and Smart Agriculture


オブジェクト指向言語(PythonやJavaScriptなど)に比べると、クラスがない分覚えることは少ない印象ですが、その分「どう書けばどう動くか」という論理的思考がよりシビアに求められる気がしています。


---


基礎の勉強メモ


まずは一通り基礎をさらってみました。いくつか印象に残った点をメモしておきます。


  • `while(1)` 無限ループ
  • 条件分岐
  • データ型と範囲
  • 乱数の生成
  • 標準入力・出力

---


最大の壁、ポインタとメモリ


やはり一度は躓きました、ポインタ

「&」は住所(アドレス)を教える、「*」はその住所にある値を使う。


C Pointers Concept

C Pointers Concept


他の言語で「変数をさらに変数に入れる」ような感覚があったので、なんとか理解できました。基本情報の勉強でも出てきたような気がします(笑)。


# 【補足】メモリの「スロット」の話

ここで、ポインタが具体的にどれくらいのメモリを使うのか、少し深掘りして補足します。


| 型 | 使用するスロット数 (バイト) | 役割 |

| :--- | :--- | :--- |

| char | 1スロット | 1文字を格納 |

| int | 4スロット | 約21億までの整数(32ビット環境以上) |

| double | 8スロット | 精度の高い実数 |

| ポインタ型 | 4 または 8 スロット | データの場所(アドレス)を指し示す |


※ポインタ変数のサイズは、実は「指している先の型」に関わらず、実行環境(32bitか64bitか)によって決まります。現代の多くのPC(64bit)なら8スロット(8バイト)分を使って「住所」を記録しています。


大きなデータ(画像やセンサーログなど)をそのまま渡すとメモリを大量に消費しますが、ポインタを使って「住所だけ」を渡す(参照渡し)ことで、メモリ使用量を抑え、高速な処理が可能になるんですね。


---


スマート農業:自動水撒きシミュレーション


習ったことを活かして、スマート農業で使われそうな「自動水撒きシステム」の簡易コードを書いてみました。

湿度が下がったら水を撒き、待機中や動作中にバッテリーが減っていくシンプルなロジックです。


Smart Agriculture Robot

Smart Agriculture Robot


#include <stdio.h> 
#include <stdlib.h> 
#include <time.h>
#include <unistd.h>

int main (){
    double moisture = 100.0;
    double battery = 100.0;

    // 乱数のシードを設定
    srand((unsigned int)time(NULL));

    while(1){
        printf("水分量: %.1f%% | 電池: %.1f%%\n", moisture, battery);

        if (battery <= 0) {
            printf("バッテリー切れ!充電してください\n");
            break;
        }

        // 湿度がランダムに低下
        int random_num = rand() % 10;
        moisture -= random_num;
        
        if (moisture >= 80){
            printf("十分な水分量です:%.1f%% (-1%%)\n", moisture);
            battery -= 1;
        } else if (moisture <= 30){
            printf("散水します...水分量:%.1f%%\n", moisture);
            moisture += 50; // 水を撒いて湿度回復
            battery -= 5;   // 散水は電力を消費
            printf("散水完了。現在の水分量:%.1f%%\n", moisture);
        } else {
            printf("待機中... 水分量:%.1f%% (-1%%)\n", moisture);
            battery -= 1;
        }

        if(battery <= 0) {
            printf("充電してください!\n");
            break;
        }

        sleep(1); // 1秒待機
    }
    return 0;
}

実際には、ここに土壌湿度センサーやポンプを制御するライブラリを組み込んでいくことになります。低レイヤな制御ができるC言語だからこそ、ハードウェアに近いスマート農業の実装に強いんだなと実感しました。


---


学習の参考にしている本


一通りの基礎を学ぶにあたって、図書館で見つけた本も参考にしました。体系的にまとまっていて非常に分かりやすかったので、こちらでも紹介しておきます。


ネットの記事も便利ですが、一冊の本をじっくり読み進めると、知識の繋がりがより深まる気がします。


これから


C言語はセキュリティを学ぶ上でも、オーバーフロー攻撃の原理を理解したりするのに不可欠です。

農業とIT、そしてセキュリティ。一見バラバラに見えて実は繋がっているこれらの分野を、C言語という土台からしっかり固めていきたいと思います。


この記事をシェア

💬 コメント (0)

読み込み中...

💬 コメントを投稿

0 / 1000 文字

※ コメントは承認後に表示されます。スパム対策のため、URLを含むコメントは自動的に承認待ちになります。

著者情報

トシぼう

トシぼう

東京でのサラリーマン生活を経て、2024年に北海道へ移住したアラフォー見習いエンジニア。 「技術×節約×資産形成」をテーマに、自由で豊かなライフスタイルを模索中。 テスターとして1年経験を積んだ後、開発現場(SES)に参画。Linux, Docker, Gitなどのモダンな開発フローをOJTで習得中です。 記事内容に誤りや古い情報があれば、随時修正していきますので、気になる点があればお気軽にコメントやお問い合わせから教えていただけると嬉しいです。

C言語学習記:セキュリティとスマート農業を繋ぐ「最強の基礎力」 | トシぼうのブログ