【無料ですぐに作れる】Webフォームで仕事の効率化してみませんか?私は入社してからc言語の学習に取り組んでいます。約1ヵ月間の学びの集大成として、コマンドの自作に挑戦してみました。c言語の学習方法の中でも、コマンドの自作は多くの学びを得られると感じました。私と同じ初心者さんは、挑戦してみることをおすすめします。今回はlinuxのsortコマンドをc言語で作成する方法を紹介します。コマンド作成を通して学んだ3つのことを中心に解説していきます。パイプライン処理による標準入力を受信する方法malloc()とmemset()を用いた動的メモリの割り当てgetopt()でオプション取得と各オプションに対応したソート関数の作成コード全文も載せていますので、学習の参考にしてみてくださいね。考え方と実装方法コード全文まとめSortコマンドとは「sort」はテキストファイルの内容を行単位で並べ替えるコマンドです。[ファイル名][/code]使い方テキストファイル(test.txt)を用意します。lang=text]10403010020[/code]以下のように実行します。lang=text]10100203040[/code]「sort」コマンドは、ASCIIコード順に並べ替えます。作成したプログラムでは、1任意のファイルを開く方法と2標準入力を受信する方法の2つを実装しています。ここでは、2標準入力を受信する方法について詳しく解説します。パイプライン処理とは「|」を使用してあるコマンドの出力を別のプログラムの入力に引き渡す操作です。[プログラム名][/code]パイプライン処理を用いて、プログラムがcatコマンドの標準出力を標準入力として受信できます。標準入力の内容を取得する必要がある。→fgetc(stdin)で内容を1文字ずつ取得する。標準入力の内容を複数回参照したい。→stdinで取得したデータを複数回参照したい場合、別ファイルに書き込んでおく。実装方法は、こちらです。NULL;}}[/code]stdinの内容を複数回参照したいので、取得したデータを別ファイルに保存しています。fopen()で開いたファイルにfputc()で書き込みしています。stdinの内容を保存したファイル(test3.txt)を読み込み権限で開いて終了です。stdinで取得したデータにアクセスできる状態になりましたね。malloc()とmemset()を用いた動的メモリの割り当て今回のプログラムでは、扱うデータ数が一定ではないため、柔軟に対応できる動的メモリを使用しています。malloc()とmemset()を用いた動的メモリの割り当て方法を解説します。考え方と実装方法ソートを行うために配列を用意する。→ファイルの内容を文字列で1行ずつ格納したいので、2次元配列を作成する。格納に必要なメモリは毎回異なる。→malloc()とmemset()で動的メモリを割り当てて柔軟に対応する。実装方法は、こちらです。fp);}[/code]malloc()関数を用いてメモリを割り当てます。malloc()から返されたポインタを使うときはメモリ割り当てエラーのチェックをしましょう。memset()関数で配列を初期化しておきます。fgets()関数で配列にファイル内容を1行ずつ格納します。ソートに必要な準備が整いましたね。getopt()でオプション取得と各オプションに対応したソート関数の作成オプション処理には、getopt()関数を使用しています。getopt()でオプション取得と各オプションに対応したソート関数の作成について解説します。考え方と実装方法コマンドラインに入力されたオプションを取得する必要がある。→optget()関数を使用する。オプションに対応したソートを行う必要がある。→ソート関数を独自に作成する。実装方法は、こちらです。1;break;default:printf("無効なオプションです\n");exit(1);break;}}[/code]whileループで回してオプションをチェックしています。指定したオプションを見つけた場合、オプションフラグ用変数に1を代入しています。この処理によってどのオプションが指定されているか判別しています。*end1;}}}[/code]strtol()を用いて文字列を数値として比較します。戻り値はstrcmp()と同じにしています。数値部分が同じだった場合、残りの文字列部分で比較します。1文字ずつ比較し、文字が異なる場合、ループを抜けてASCIIコードの差で値を返します。このときに-fオプションがついている場合、tolower()で小文字に変換してから比較を行います。tolower(*str1);}[/code]tolower()を用いて小文字に統一して比較しています。toupper()で大文字に統一しても構いません。NULL;}}[/code]まとめ今回はlinuxのsortコマンドをc言語で作成する方法を紹介しました。sortコマンド作成を通して、主に以下の3つのこと解説しました。パイプライン処理による標準入力を受信する方法malloc()とmemset()を用いた動的メモリの割り当てgetopt()でオプション取得と各オプションに対応したソート関数の作成コマンドはsort以外にもたくさんあります。この記事を参考にコマンド自作に挑戦してみてはいかがでしょうか。記事が役立ったらクリックをお願いしますフォームズ編集部フォーム作成クラウドサービス「Formzu(フォームズ)」を運営しているフォームズ株式会社です。オフィスで働く方、ホームページを運営されている皆様へ仕事の効率化、ビジネススキル、ITノウハウなど役立つ情報をお届けします。-->【フォーム作成クラウド】Webフォームで仕事を効率化したい方はこちらから最短30秒で作成。誰でもすぐに利用できます。