サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
インタビュー
www.mm2d.net
ソフトウェアの処理には往々にして、完了までに利用者を待たせざるを得ない場面というものがある。 純粋にCPU処理に時間がかかるものであったり、ダウンロード等の通信に時間がかかるものなど、様々な状況があるだろう。 その場合、何もユーザに知らせないと、異常が発生し止まっているのか、正常な待ち時間なのかが分からないし、 同じ時間待つにしても、待つ必要があることが、更にはどのぐらい待つ必要があるのか、 が分かったほうが、その待ち時間は短く感じるものだ。 ユーザビリティ上プログレス表示の重要度は高い。 GUIではプログレスバーという表現方法が一般的だが、 コンソール上でも類似した表示を実現する方法が幾つかある。 その方法について紹介する。 前準備 プログレスバーの表現方法を紹介していくが、 本来であれば「何らかの処理」をしながら表示するということになる。 ここでは、「何らかの処理」をスリープで表現して
C言語プログラミングに関する雑多な解説を行っていこうと思う。 C言語プログラミングと銘打ちつつも、C言語標準から外れて、 一部環境に依存していたり、POSIX準拠なAPIを前提とした内容が入るかもしれない。 プログラミングTips プログラミングを行う上で知っておくと便利なことなどを紹介していく。 コマンドラインオプションの処理 main関数の引数2015/1/18作成 getopt関数の利用2015/1/18作成 getopt_long関数の利用2015/1/18作成 printfデバッグTips 標準出力と標準エラー出力2015/1/20作成 errnoの表示2015/1/20作成 printf出力書式まとめ 出力書式のまとめ 変換指定子2015/1/25作成 出力書式のまとめ 長さ修飾子2015/2/1作成 出力書式のまとめ 最小フィールド幅/精度2015/2/1作成 出力書式のまと
ここではC言語での時間情報の取得方法について説明していく、 時間情報には様々な種類があり、また環境により利用できる関数も変わってくる。 C言語の環境であればどこでも利用できる標準関数から始まり、POSIX環境、Windows環境で利用できるAPIも紹介する。 POSIX環境 引き続き、Linux をはじめとする POSIX 環境で使用できる方法を紹介する。 前回説明したように、 POSIX環境で古くから使われてきたgettimeofday()は非推奨となり、この関数の利用が推奨されている。 プロトタイプ宣言は以下、C標準の関数ではないがヘッダは time.h である。 #include <time.h> struct timespec { time_t tv_sec; /* Seconds. */ long tv_nsec; /* Nanoseconds. */ }; int clock_
単純に文字の色が変わるだけではなく、フォントがボールドになったり、背景に色が付いているものもある。 色分け表示オプションの追加 まずは、色分け表示をさせるためのコマンドラインオプションを追加させる。 本物の ls では、 --color という「長い」オプションのみだが、 ここでは、 -C という短いオプションでも指定できるようにする。 本物の ls では、 -C はカラム表示を指示するために使用されているので別の意味になる。 コマンドラインオプションのパース処理に以下のような修正を加える。 const struct option longopts[] = { ... { "color", no_argument, NULL, 'C' }, ... }; while ((opt = getopt_long(argc, argv, "aACFl", longopts, NULL)) != -
パソコンを人に譲ったり、売ったり、廃棄したりする場合、 しっかりと対策をとっておかないと、HDDから重要な情報が盗まれる可能性がある。 HDDにはクレジットカード番号、各種アカウントの情報、パスワードなど、 流出すると大きな損害につながりかねない情報やプライバシー情報など様々な秘匿情報が格納されているはずだ。 そのため、完全消去を行うことは必須と言って良いだろう。 ここでは、多少技術的な知識は必要ではあるが、 無料で入手可能なLinuxを利用して完全消去を行う方法について説明する。 ただし、完全といいつつ、実質は『十分に解析困難な状態にする』でしか無いことを断っておく。 なお、HDDからのデータ漏洩対策はもちろんこれ以外に様々な方法はあるが、 一見ちゃんとした対策を行っているつもりで、実際は対して意味のないことという物がある。 それについては別ページにまとめたので参考にしてほしい。 ファイ
コンソール制御の話をしていこうと思う。 ここでは必要となる基本的な制御コードと、 その記述に必要なエスケープシーケンスについて説明する。 制御コード まず制御コードについて簡単に説明する。 現在一般的に使用されている、半角英数字を表現するのに使われている1byteコードは、 ASCII(American Standard Code for Information Interchange)コードである。 ASCIIコードは1byte=8bitのうち、7bitを利用し、各番号に文字が割り当てていて、その羅列で文字列を表現する。 しかし、英語圏で使われる、英数字、記号は合わせて割り当てても、7bit=128パターンにあまりがある。 その余った領域に表示文字以外の意味が割り当てられている。これを制御コードと呼んでいる。 制御コードと言われると、何やら難しい物を想像するかもしれないが、何も特別なもの
前回は、 一般的な文字列リテラルに、制御コード等を記述するためのエスケープシーケンスについて解説した。 これの発展形、というか、より柔軟な指定ができ自由度の高い制御方法として、ANSIエスケープコードというものがある。 以前の記事で、簡単な一覧を紹介したことがあるが、 改めて整理して紹介してみようと思う。 そもそもエスケープシーケンスは、狭義にはエスケープコードから始まるシーケンスなので、 むしろこちらのほうが本来のエスケープシーケンスというべきかもしれない。 ANSIエスケープコードとは 詳細な一覧は Wikipedia に英語ではあるが載っている。 できることは大まかにいうと、 コンソール上のカーソル位置の移動、出力済みテキストの消去、コンソールのスクロール、 テキストフォントの種別指定、前景色、背景色の指定、といったところになる。 いわゆる端末エミュレータと呼ばれるコンソールでこのシ
ここではC言語での時間情報の取得方法について説明していく、 時間情報には様々な種類があり、また環境により利用できる関数も変わってくる。 C言語の環境であればどこでも利用できる標準関数から始まり、POSIX環境、Windows環境で利用できるAPIも紹介する。 C言語標準 まずはC言語の標準関数で、C言語が使える環境であればどこでも使用できる方法を紹介する。 時刻情報を取得するtime()関数。 プロトタイプ宣言は以下のようになっている。 #include <time.h> time_t time(time_t *t); 値の取得方法としては、以下のように引数に格納先へのポインタを渡す方法。 time_t t; time(&t); または、以下の用に戻り値を利用する方法。 time_t t = time(NULL); 引数がNULLでない場合は、その値に代入した後、同じ値が戻される。 どちら
前回までポインタなお話でしたが、 間に挟めなかったちょっとしたことについて解説 ストリング(文字列) アルバイトでTA(ティーチングアシスタント&テクニカルアシスタント: 詰まるところプログラムとかを大学生相手に教えるお仕事)なんてやってる私ですが、 やはり初心者にとってC言語における文字列ってのはハードルが高いらしい。 一度理解してしまえばどうってことはないんですが・・・ C言語では一文字を表すのは char 型、文字列はその集合なので char 型の配列として表現されます。 しかし、配列は長さを保持できないし、配列の長さと文字列の長さも異なる場合が多いため、文字の羅列だけでは情報が足りません。 そこで、Cでは終端文字(ヌル文字もしくはナル文字、NUL 文字(NULL ではない))を使っています、 この文字が現れるまでを一つの文字列として扱かわれるわけです。 終端文字として扱われるのは文
さて、次回からHDDのパーティションを切るわけですが、 ここでHDDのパーティションについて触れておきます。 HDDには基本領域と拡張領域あわせて最大4つの領域を設定できます。 (Windowsのfdiskでは基本領域は一つしか設定できませんが、 それはソフトの仕様であってHDDの規格による制限ではありません。) パーティションは基本領域と、拡張領域に設定した論理領域の2種類があります。 基本領域は上記の制限で最大4つまでしか設定できませんが、論理領域に数の制限はありません(たぶん(笑))。 ですから、パーティションを4つ以上確保したい場合、拡張領域を設定しないといけません。 Linuxに必要なパーティションですが、システム全ての入る/(ルート)と スワップ(仮想メモリに使われる領域)の二つのパーティションがあればLinuxのインストールには十分です。 しかし、他のOSでも言えることですが
サイトトップ 過去のコンテンツ C言語 画像ファイルの扱い方 (5) -BMP(DIB)形式 (1) BMP形式について、改めて書き直しています。以下を参照ください。 BMPファイルフォーマット(簡易版) BMP画像の読み込み(簡易版) BMP画像の書き出し(簡易版) BMPファイルフォーマット(Windows) BMPファイルフォーマット(OS/2) BMPファイルフォーマット(Windows拡張) BMPファイルフォーマット(画像データ) BMP画像の読み込み(ヘッダ) BMP画像の読み込み(画像データ) BMP画像の書き出し(ヘッダ) BMP画像の書き出し(画像データ) PNG画像の入出力 さて、前回は UNIX 系列の OS で標準的に用いられることの多い PPM 形式について説明しました。 しかし、世の中のコンシューマー OS はほとんどが Windows 、私がメインに使ってい
前回は、ちょっと高度ですが、非常に処理系依存で、最終的につかうかどうか分からない知識でしたが。 今回と次回で紹介する内容はちょっと高度だけど、 初心者がもう一歩ステップアップするところでは必ずといっていいほど必要になる知識だと思います。 では、いってみましょう~~ void型ポインタ 一般的な入門書ではおそらく扱われていない、 もしくは扱われていたとしてもそういうものがあるという程度で 実際どうやって使うのかまでは書かれていないと思いますが、 C言語には「 void 型ポインタ」というものがあります。 単に「 void 」という記述は、返値の型などでよく見かけると思います。 返値の方で指定すると、何も返さないということを示すものです。 また、引数に書いた場合、何も引数をとらないという意味になります。 すなわち、 void は何もないという意味で用いられています。 では「 void 型」のポ
プログラムの課題などで実行速度を向上するにはどうしたらよいか? なんて問題が出されることがあります。 そんな時実際どれくらい時間がかかっているのかを測ってみたくなります。 ベンチマークソフトのように処理速度の計測なんかをできたら面白いかもしれません。 そこで、時間の測り方を書いてみたいと思います。 まず、時間関係の関数を使うには time.h というヘッダファイルをインクルードする必要があります。 こいつの中身を一度見ておいたほうがいいでしょう。 Windows の Visual C++ だと C:\Program Files\Microsoft Visual Studio\VC98\Include にあります。 VineLinux の場合は /usr/include/ にありますが、 内部で /usr/include/bits/ にある time.h をインクルードしているので二つとも見
これは Cygwin 上の gcc での結果で Visual C++ を利用した場合 long double は 8Byte となります。 あと、 sizeof の結果は char いくつ分のサイズかを返す訳ですが、今回実験している環境だけではなく、 ほとんどの処理系では char は 8bit(1Byte)であるため(っていうかそうじゃない処理系ってあるのかなぁ)、 ここでは sizeof の返す値の単位を Byte であるとして話を進めています。 さらに、何度も書いていますがここでやっていることは、ほとんどが処理系依存で、 このような結果になることを前提にプログラムを書くと、非常に移植性の低いものになってしまいます。 また、同じ環境でもコンパイラの最適化の影響とかを受ける可能性もないわけではありません。 ハードウェア的にどうのといってる部分がいっぱいありますが、 正直なところ私はそっち
プログラミングの入門書に書いてある通りに勉強していても、 自分のプログラムの結果がコンソールに出ているだけではなんだか味気なく感じてしまうことはありませんか? ある程度プログラミングのやり方が分かってくると、画像を扱いたくなってくる人も多いでしょう。 それに、結果が画像の形で現れてくれると、プログラミングがなんだか一層楽しくなります。 でも、画像ファイルの扱い方は入門書にはほとんど書かれていませんね、 私も画像ファイルを扱いたいと思ったときどうすればいいのか調べるのに苦労しました。 ここでは、その画像ファイルのC言語での扱い方を解説したいと思います。 ここでやる内容は、画像ファイルのデータを書き出して、それをビューワなどで開いて確認するという形になります。 画像ファイルをC言語のプログラムで表示したりするというのとはちょっと違いますのでご注意を。 (こいつをするにはOSに依存したライブラリ
さて、前回までに BMP 形式の読み込み、書き込みを行う関数を紹介しました。 そこで出てきた小技の説明をしたいと思います。 それにはメモリとポインタの関係についての知識が必要ですので、 ポインタの基本を説明します。というかこれがすべて。 ポインタというのは C 言語が持っている一つの強力な機能です。 一方で、 C 言語初心者にとって最大の難関ともいえるものです。 しかし、これをマスターしてしまえば非常に便利で、様々な応用ができるようになります。 (実際ポインタだけで1冊の本が出ているくらい奥が深いもの) まあ、いいことばかりではなくて、ポインタは使い方を誤ると非常に危険な諸刃の刃です・・・ (ポインタはバグの宝庫とまで呼ばれてたりする) あと、注意事項として以下でプログラムを書いて実行していますが。この結果は処理系依存となります。 このような結果になるという前提でプログラムを書くと、移植性
サイトトップ 過去のコンテンツ C言語 コンソールでプログレス表示(アニメーション)(3) プログレス表示の方法について書きなおしています。以下を参照ください。 コンソールによるプログレス表示 エスケープシーケンスによるスクリーン制御の利用 エスケープシーケンスと呼ばれるスクリーン制御用のコードを利用して画面表示を行う方法を説明します。 今確認したところどうやら、 Windows 2000 のコマンドプロンプトではこれは使えないようです(Cygwin のコンソールなら OK)。 MS-DOS プロンプトや Linux の kterm などでは使えるようですが・・・ ここまでくると、システムコールとか使わないといけないような気もしますがとりあえずやってみましょう。 エスケープシーケンスについては第6回エスケープシーケンスを参照してください。 #include <stdio.h> #inclu
今回は前回の続きで、ちょっと高度なプログラミング技術を身につける上で重要になってくる、 関数ポインタというものを扱います。 関数ポインタ さて、ふつうの入門書では扱っていないかもしれませんが、関数にもポインタというものがあります。 関数のポインタというと、イメージがつかめない人も多いかと思いますが、 プログラムというものをアセンブラとかのレベルで考えると※1、一列に並んだ命令の集まりといえます。 その中で関数というのは、その命令列の中のどこかにかかれている命令の小さな集合です。 関数呼び出しを一種のジャンプ命令(実行中に処理対象がこの集合の先頭へ移り、終わると戻る)と考えれば、 ポインタの値はジャンプ先の位置情報と考えることができます (サブルーチンという言葉を知っている人には簡単に理解できますね。 GOSUB~RETURN とか)。 高級言語を使っていると忘れがちですが、いわゆるノイマン
サイトトップ 過去のコンテンツ C言語 エスケープシーケンス コンソール制御について、より詳しく、実際の出力例などを上げながら、 まとめたページを作りましたので以下も参照ください。 エスケープシーケンス ANSIエスケープコード コンソールグラフィック CUI のコマンドラインで動くプログラムを書く上でカーソルの位置などをコントロールできたらと思うことがあります。 こいつを実現するには、「エスケープシーケンス」というものを使います。 しかし、このエスケープシーケンスはハードウェアやOSに依存した部分が多いので注意が必要です。 とりあえず、 Windows 2000/XP (おそらく NT も)のコマンドプロンプトでは機能しない ※ことを確認しました。(ただし、 Cygwin 上では使用可能でした) MS-DOS プロンプトでは一部動くことを確認しました(一部が動いたのではなく、一部確認した
サイトトップ 過去のコンテンツ C言語 画像ファイルの扱い方 (6) -BMP(DIB)形式 (2) BMP形式について、改めて書き直しています。以下を参照ください。 BMPファイルフォーマット(簡易版) BMP画像の読み込み(簡易版) BMP画像の書き出し(簡易版) BMPファイルフォーマット(Windows) BMPファイルフォーマット(OS/2) BMPファイルフォーマット(Windows拡張) BMPファイルフォーマット(画像データ) BMP画像の読み込み(ヘッダ) BMP画像の読み込み(画像データ) BMP画像の書き出し(ヘッダ) BMP画像の書き出し(画像データ) PNG画像の入出力 BMP形式入力関数 というわけで、がんばってサンプルコードを作ってみました。 これを作る上で、 Visual C++ の変数名などを一部参考にさせてもらっています。 まず、変数のサイズが重要になる
プログラミングに関する話題の解説をやってみようと思う。 完全無計画なのでどんな感じで書いていくかとか気分次第。 ディレクトリ構造とかもコロコロ変わるかも。 例によって、対象読者がふらふら、初級者向けの解説のように見せかけて、 プログラミングに対する深い理解が前提の説明が平気で混じっていたりする。 まあ殆ど自己満足のための解説なので生暖かい目で眺めていただき、指摘していただければと思う。 C言語開発 C言語プログラミングに関する雑多な解説を行っていこうと思う。 C言語プログラミングと銘打ちつつも、C言語標準から外れて、 一部環境に依存していたり、POSIX準拠なAPIを前提とした内容が入るかもしれない。 Linuxプログラミング Linuxプログラミングについて解説していこうと思う。 開発言語は今のところC言語のみを想定しているが、 C言語解説のカテゴリで扱うには少し不適切な、 Linuxの
サイトトップ 過去のコンテンツ Linuxをデスクトップで使おう Linuxを用いたHDDのデータ完全消去法 このページを作成してから10年以上が経過し、 当時利用していたKNOPPIX日本語版の開発も終了しています。 基本的な内容は陳腐化していないものの、より新しい情報に基づいたページを作成しています。 以下のページもご参照ください。 Linuxを利用したHDDの完全消去 PC を他人に譲ったり、売る、または廃棄するとき。 その HDD に格納されているデータは大丈夫だろうか? って、ちょっと前にそういうネタがはやったような気がします。 まぁさすがに、 HDD 内のデータをそのままでって人はいないでしょうけど、 パーティションを消したり、 HDD を一度フォーマットするっていう程度で安心している人が結構多いと思います。 しかし、これでは HDD 内のデータを完全に消去したとはいえないので
このコンテンツはだいぶ古く、私の知識も未熟だった頃の内容のままアップデートされておりません。 ページとしては残しておきますが、明らかな問題がない限り、今後更新は行わない方針です。 ここでは、C言語について解説みたいなことをやってみようかと思います。 私の趣味の一つははプログラミングですが、 そのためにC言語の入門書を卒業した後にちょくちょく調べる必要のあったこと、 ちょっと実用的なプログラムや遊びのプログラミングに必要な要素とか、 入門書にかかれていなけれども重要な要素といったことについてつらつらと書いてみようかと思っています。 とはいえ、私自身勉強中なのでいい加減なことを書いてるかもしれません、 そのときはご指摘ください。こっそり直します(笑) C言語というのは言語仕様そのものは比較的簡単ですが、非常に奥の深いものです。 そんなわけでなのかどうかはともかく入門書を卒業すると、 表面的には
私の愛用する Vine Linux には今のところ AMD64 版が用意される気配はないようです。 しかし、せっかく Athlon64 マシンを持っているのだから、 64bitの世界を味わってみたいのが人の常。 すでに AMD64 版が用意されているメジャーディストリビューションを利用すればいいじゃないかとかそういうことはおいておいて、 Vine Linux に 64bit カーネルをインストールすることにチャレンジしてみました。 Workstation に分類するのも変な気がしますがServerに限らないということで、 あと、ここでやってること、実は半分ほどしか理解してないわけで、本当に必要な作業かどうかはっきりしないでやってたりします。 それと、一応私の環境では問題なくいくことを確認しましたが、ほかの環境でどうなるのか全くわかりません。 これみてやってみようって人は自己責任でお願いしま
次のページ
このページを最初にブックマークしてみませんか?
『トップページ - 碧色工房』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く