2013年6月2日日曜日

開発環境

プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第8章(UNIXシステム・インタフェース)、8.1(ファイル記述子)、8.2(低水準入出力 - Read と Write)、8.3(Open, Creat, Close, Unlink)の演習8-1を解いてみる。

その他参考書籍

演習 8-1.

コード

sample.c

#include <stdio.h>
#include <fcntl.h>
#include <stdarg.h>

void error(char *, ...);

int main(int argc, char *argv[])
{
    int fd;
    void filecopy(int, int);
    char *prog = argv[0];
    if (argc == 1)
        filecopy(0, 1);
    else
        while (--argc > 0)
            if ((fd = open(*++argv, O_RDONLY, 0)) == -1)
                error("%s: can't open %s\n",
                    prog, *argv);
            else {
                filecopy(fd, 1);
                close(fd);
            }
    return 0;
}

void filecopy(int ifd, int ofd)
{
    char buf[BUFSIZ];
    int n;
    
    while ((n = read(ifd, buf, BUFSIZ)) > 0)
        write(ofd, buf, n);
}

void error(char *fmt, ...)
{
    va_list args;
    
    va_start(args, fmt);
    fprintf(stderr, "error: ");
    vfprintf(stderr, fmt, args);
    fprintf(stderr, "\n");
    va_end(args);
    exit(1);
}

入出力結果(Terminal)

$ time ./cat.out /usr/bin/*

real 1m54.353s
user 0m2.782s
sys 0m5.595s
$ time ./a.out /usr/bin/*

real 1m43.666s
user 0m0.117s
sys 0m5.590s
$

cat.outは第7章のプログラムcat。user時間は半分以下になってるけど、sys時間(CPU)を比べても、そんなに違いが分からず。。timeコマンドの使い方を間違えてるのか、real、user、sys時間の意味がよく理解できてないのか、プログラムを書き間違えているのかは分からないけど、とりあえず次に進むことに!

0 コメント:

コメントを投稿