プログラミングにおけるファイル操作の基本

1. ファイルの概要 コンピュータ上のファイルは、プログラムファイルとデータファイルに大別されます。プログラムファイルはコンパイル可能なソースコードや実行可能形式を指します。 2. ファイル形式の分類 プログラムファイル: ソースファイル(.c)、オブジェクトファイル(Windows:.obj/Linux:.o)、実行ファイル(.exe) データファイル: テキスト形式とバイナリ形 ...

8月4日 02:32 投稿

C言語で実装する階段ジャンプの問題解決手法(組合せと動的計画法)

問題の定式化 段数が n の階段を登る際、一度に1段または2段ずつ飛んで進行します。この移動規則に従い、最終段に到達するまでの全経路パターン数を計算するアルゴリズムについて解説します。 アプローチ1:数学的組合せによる求解 組合せ数学の応用では、1段ジャンプを s 回、2段ジャンプを d 回実施した場合の制約式 s + 2d = n に着目します。具体的な回数組合せが確定 ...

8月3日 23:08 投稿

C言語ポインタの実践的活用とメモリ管理

ビットとバイトの基本 コンピュータの情報処理の最小単位はビットで、0または1の2状態を表現します。バイトは8ビットから構成され、メモリの最小アドレス可能単位として利用されます。1バイト = 8ビットの関係が基本となります。 メモリ格納方式 データのメモリ配置方法にはビッグエンディアンとリトルエンディアンの2方式があります。ビッグエンディアンではデータの上位 ...

8月2日 17:10 投稿

C言語における文字列処理関数とメモリ操作関数の独自実装

主要な文字列・メモリ関数の実装 C言語標準ライブラリの文字列処理およびメモリ操作関数を独自に実装する方法を示します。各関数の仕様に準拠した動作を再現します。 文字列長の取得 size_t custom_strlen(const char* s) { const char* start = s; while (*s) s++; return s - start; } 文字列コピー char* custom_strcpy(char* dest, const char* src) { ...

8月2日 16:15 投稿

EDK2 開発:UEFI アプリケーションからのシェルコマンド実行手法

UEFI ファームウェアの開発プロセスにおいて、コンポーネント内部からシリアルコンソール上で利用可能なシェル機能を実行したい場合があります。これは Linux 環境における C プログラム内の system() 関数呼び出しと機能的には類似していますが、UEFI 標準プロトコルを活用する必要があります。 モジュール定義ファイル(INF)の設定 まず、プロジェクト用の INF ファイ ...

8月1日 17:10 投稿

C言語におけるポインタの基礎

メモリアドレスとは C言語で重要な概念の一つに「アドレス」があります。メモリ(ここでは物理メモリではなく、仮想的な論理メモリ空間を指します)は、1バイトごとに一意な番号が割り当てられています。たとえば、定規の目盛りをイメージしてください。0から999までの目盛りが刻まれた定規で、35mmや256mmの位置を正確に指し示せます。メモリも同様に線形に配置されており ...

8月1日 16:35 投稿

LVGLでC言語を使用した多言語対応の実装

LVGLにおける多言語切り替え機能は、標準ではやや複雑で扱いにくい。公式ではNode.jsとnpmを用いてlv_i18n_gツールを使い、JSONからコードを生成する流れを推奨しているが、開発フローに余計な依存を持ち込むことになり、組み込み環境では現実的ではない場合が多い。そこで、簡潔かつ効率的な手動管理方式を採用する方法を紹介する。ただし、使用するフォントは対象言語の ...

8月1日 00:46 投稿

コード生成とマクロの技術比較:Dart、C言語、およびその他の高級言語

Dartにおけるマクロ機能の削除について議論し、GoやPython、Javaといった他の高級言語がなぜマクロを採用しないのかを探ります。 共通点:コンパイル時のコード生成の利点 C言語のマクロとDartのbuild_runnerは異なる実装方法を持っていますが、同じ目標を持っています。それは、実行前に問題を解決し、ランタイムのオーバーヘッドを減らすことです。 1. コンパイル前 ...

7月30日 21:31 投稿

Linuxにおけるプロセス間通信の手法まとめ

パイプ パイプは、親子プロセス間の通信に最もシンプルなIPC(Inter-Process Communication)手法です。一つのプロセスがパイプにデータを書き込み、別のプロセスがそのデータを読み取ることができます。 #include #include #include #include #include #include int main() { int pipe_fds[2]; // パイプの読み書き用ファイルディスクリプタ pid_t child_p ...

7月30日 17:08 投稿

初めてのCプログラム

1. プログラミングの第一視点 この記事では、第一視点から完全なCプログラムを書いてみましょう。 2. C言語の構文 #include int entry_point() { display_message("こんにちは、C言語\n"); return SUCCESS; } 上記のプログラムから、以下のC言語の構文を学びます。 2.1 entry_point()関数 Cプログラムのコードが何行あっても、必ずentry_point()関数から実行が ...

7月30日 04:43 投稿