海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
昔どっかで読んだことあるんだけど、自分でやったことなかったので、やってみる。
/* 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
本当に放置するしかないのかとか、すべてに同意するわけじゃないんですが、結論には同意。
10年ほどまえ、じつは、 就職活動はいっしょうけんめいにやるもんだと勘違いしていたので(?)、 いくつもの会社の面接を受けたんですよね。
で、趣味とか聞かれるじゃないですか、なぜか。
で、正直に「散歩」とこたえて気まずい空気になったのを、思い出した(笑)。
いやー、どうやって話をふくらますのかのプランなく、
面接のひと「えーと、ご趣味は。。。(履歴書に「散歩」とかいてある)」
おれ「さんぽ」
両者「・・・・」
みたいな感じだったかと(若干記憶が脚色されている恐れあり)。
こりゃいかんなと反省した。
このたび書き始めたプログラムでは、Doxygen + Cutter を用いた Document & Test First な開発手法をためしている。
こりゃ、快適だ。
もちろん、上記は一本道ではなくて、header やドキュメントを書いているうちに、 インタフェースの不具合に気づいて書き直したりといった作業は当然発生します。 それに、開発対象すべてについて、1 が終わってから 2 というように進めるんじゃなくて、 ボトムアップにちょっとずつ作っていってます。
3. までの開発環境整備を、Cutter チュートリアルをみながらやった。 書かれているのを真似していけば、TestFirst かつ GNU ビルドシステムな開発環境が手にはいるよ。
やー、しかし、快適だなぁ。
いままでの僕はというと、
だったんですけどね(註:ぼくはソフト開発を業務にしていないので、アマチュアである点を強調しておきます。 一応、所属組織の名誉のために。)。
いやいや、すごい楽しい。このぶんだと、後になって「さいしょから書き直したい症候群」 を発症しないで済むかもしれない。
実は、autoconf, automake を使ってみるのも初めてだったのですが、 Cutter チュートリアルの通りにやってたら、自然とできちゃったというのも、ちょーありがたいです。
まじ、おすすめ。こーゆーの無しでプログラム書くとかありえない(ありえなかった人談)。