計算機科学のブログ

C - 小さなツール - 1つのことだけをうまくやる - 標準出力, 標準エラー

Head First C ―頭とからだで覚えるCの基本David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の3章(小さなツール - 1つのことだけをうまくやる)、p.125(極秘)の解答を求めてみる。

Makefile

all: secret_messages
	./secret_messages < secret.txt > message1.txt 2> message2.txt

secret_messages: secret_messages.c
	cc secret_messages.c -o secret_messages

コード

secret_messages.c

#include <stdio.h>
#include <stdbool.h>

// メッセージ1
// the submarine will surface at nine pm
// メッセージ2
// buy six eggs and some milk
int main()
{
    char word[10];
    int i = 0;
    while (scanf("%9s", word) == 1)
    {
        i++;
        if (i % 2)
        {
            fprintf(stdout, "%s\n", word);
        }
        else
        {
            fprintf(stderr, "%s\n", word);
        }
    }
}

入出力結果(Terminal, Zsh)

% make
cc secret_messages.c -o secret_messages
./secret_messages < secret.txt > message1.txt 2> message2.txt
% cat message1.txt 
the
submarine
will
surface
at
nine
pm
% cat message2.txt
buy
six
eggs
and
some
milk
%