トップ «前の日記(2009-04-08 (Wed)) 最新 次の日記(2009-04-10 (Fri))» 編集

uDiary

海野秀之(うんのひでゆき)の外部記憶

Twitter (twilog) / RSS / アンテナ / ぶくま

2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|

2009-04-09 (Thu)

dup, dup2 を使って標準出力を切り替えてみよう

昔どっかで読んだことあるんだけど、自分でやったことなかったので、やってみる。

/* duptest.c
 * dup/dup2 をつかって、標準出力を切り替えてみるよ。
 */

#include <stdio.h>

/* したの3つは open のため */

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

/* unistd.h は dup/dup2 のため */

#include <unistd.h>

int main()
{
  int fd, stdout_backup;

  /* 標準出力のバックアップ
   * STDOUT_FILENO が指すファイル(つまり標準出力)を指すファイルディスクリプタを
   * もう一個つくる。
   */
  stdout_backup = dup(STDOUT_FILENO);

  /* 出力用ファイルを開く */
  fd = open("hoge.txt", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);

  puts("ひとーつ");

  /* STDOUT_FILENO が fd と同じファイルを指すようになります。*/
  dup2(fd, STDOUT_FILENO);

  puts("ふたーつ");

   /* STDOUT_FILENO が stdout_backup と同じファイルを指すようになります。
    * つまり、元通り標準出力を指すようになります。
    */
  dup2(stdout_backup, STDOUT_FILENO);

  puts("みっつ");

  return 0;
}

コンパイル、実行結果:

% gcc duptest.c
% ./a.out
ひとーつ
みっつ
% cat hoge.txt
ふたーつ

うん。Solaris 10 上で確認した。

散歩重要

http://www.nurs.or.jp/~ogochan/essay/archives/1706

本当に放置するしかないのかとか、すべてに同意するわけじゃないんですが、結論には同意。

  • dis ってもしゃあない
  • ようするに、散歩重要

10年ほどまえ、じつは、 就職活動はいっしょうけんめいにやるもんだと勘違いしていたので(?)、 いくつもの会社の面接を受けたんですよね。

で、趣味とか聞かれるじゃないですか、なぜか。

で、正直に「散歩」とこたえて気まずい空気になったのを、思い出した(笑)。

いやー、どうやって話をふくらますのかのプランなく、

面接のひと「えーと、ご趣味は。。。(履歴書に「散歩」とかいてある)」

おれ「さんぽ」

両者「・・・・」

みたいな感じだったかと(若干記憶が脚色されている恐れあり)。

こりゃいかんなと反省した。

[Cutter] これは快適!

このたび書き始めたプログラムでは、Doxygen + Cutter を用いた Document & Test First な開発手法をためしている。

こりゃ、快適だ。

  1. まず、公式インタフェースとして header ファイルを書く。このとき、Doxygen を用いてリファレンスマニュアルも書いてしまう。
  2. つぎに、前述の公式インタフェースをもとに、単体テストを書く。このとき、Doxygen を用いて、テスト仕様も書いちゃう。むしろ、先にテスト仕様を書いて、その後単体テストのコーディングかな。
  3. コーディングの前に、最初のテスト。当然 fail する。
  4. あとは、コーディングして、テストして、デバッグ……

もちろん、上記は一本道ではなくて、header やドキュメントを書いているうちに、 インタフェースの不具合に気づいて書き直したりといった作業は当然発生します。 それに、開発対象すべてについて、1 が終わってから 2 というように進めるんじゃなくて、 ボトムアップにちょっとずつ作っていってます。

3. までの開発環境整備を、Cutter チュートリアルをみながらやった。 書かれているのを真似していけば、TestFirst かつ GNU ビルドシステムな開発環境が手にはいるよ。

やー、しかし、快適だなぁ。

いままでの僕はというと、

  • あとでドキュメント書こうと思って(本気で思っているのかどうかも疑問)、書けたためしがない。
  • 体系的なユニットテストをやったことない。
  • 自己流 Makefile (もういやだ!)

だったんですけどね(註:ぼくはソフト開発を業務にしていないので、アマチュアである点を強調しておきます。 一応、所属組織の名誉のために。)。

いやいや、すごい楽しい。このぶんだと、後になって「さいしょから書き直したい症候群」 を発症しないで済むかもしれない。

実は、autoconf, automake を使ってみるのも初めてだったのですが、 Cutter チュートリアルの通りにやってたら、自然とできちゃったというのも、ちょーありがたいです。

まじ、おすすめ。こーゆーの無しでプログラム書くとかありえない(ありえなかった人談)。


2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|
Categories 3imp | Card | Cutter | Dalvik | Euler | Football | GAE/J | Hand | Haskell | Re:View | Ruby | Scheme | TQD | Tiger | TigerBook読 | UikiTeXi | Verilog | Violin | Web | parconc | tDiary | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声