2014年2月25日火曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の10章(プロセス間通信)、自分で考えてみよう(p.435)を解いてみる。

その他参考書籍

自分で考えてみよう(p.435)

コード(BBEdit, Emacs)

newshound2.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

void error(char *msg) {
    fprintf(stderr, "%s:%s\n", msg, strerror(errno));
    exit(1);
}

int main(int argc, char *argv[])
{
    char *phrase = argv[1];
    char *vars[] =
        {"RSS_FEED=http://feeds.feedburner.com/KamimurasBlog?format=xml",
         NULL};
    FILE *f = fopen("stories.txt", "w");
    if (!f) {
        error("stories.txtを開けません。");
    }
    pid_t pid = fork();
    if (pid == -1) {
        error("プロセスをフォークできません。");
    }
    if (!pid) {
        if (dup2(fileno(f), 1) == -1) {
            error("標準出力をリダイレクトできません。");
        }
        if (execle("/usr/bin/env", "/usr/bin/env", "python", "./rssgossip.py",
                phrase, NULL, vars) == -1) {
            error("スクリプトを実行できません。");
        }
    }
    return (0);
}

Makefile

all: newshound2

newshound2: newshound2.c
 cc -g -o newshound2 newshound2.c

clean:
 rm newshound2

入出力結果(Terminal)

$ make && ./newshound2 'Scheme'
cc -g -o newshound2 newshound2.c
$ cat stories.txt 
Scheme - (((Lambert)))
Scheme - (((Euler)))
Scheme - ((())
$ ./newshound2 'C -'
$ cat stories.txt 
C - (execfork)
C - (execfor loop)
$ ./newshound2 'C\+\+'
$ cat stories.txt 
C++ - (C++ (())
C++ - (C++ (()))
$ ./newshound2 'Haskell'
$ cat stories.txt 
Haskell - : (PGM()())
Haskell - : (PGM()())
$ ./newshound2 'JavaScript'
$ cat stories.txt 
JavaScript - ((getElementById, removeChild, createTextNode, appendChild, firstChild))
JavaScript - (DOM(Document Object Model))
JavaScript - (HTML(text), html(jQuery))
$ ./newshound2 'Dart'
$ ./newshound2 'Dart'
$ cat stories.txt 
Dart - (remove, appendfirstChildText cladd)
Dart - (DOM(Document Object Model))
Dart - (HTML(text, setInnerHtml))
$ ./newshound2 'Perl'
$ cat stories.txt 
Perl - (sortSTDIN)
Perl - (foreach)
Perl - ((reverse))
$

0 コメント:

コメントを投稿