2013年12月22日日曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅢ部(高度なプログラミング概念)の18章(モジュールプログラミング)、18-14(プログラミング実習)、実習18-1.を解いてみる。

その他参考書籍

18-14(プログラミング実習)、実習18-1

コード

temp.h

extern void open_file(char *name);
extern void define_header(char *heading);
extern void print_line(char *line);
extern void page(void);
extern void close_file(void);

コード

temp.c

#include <stdio.h>
#include <stdlib.h>

static FILE *out_file;

void open_file(char *name)
{
    out_file = fopen(name, "w");
    if(out_file == NULL){
        fprintf(stderr, "Error: Unable to output file '%s'\n", name);
        exit (8);
    }
}

void define_header(char *heading)
{
    fprintf(out_file, "HEAD: %s\n", heading);
}

void print_line(char *line)
{
    fprintf(out_file, "%s", line);
}

void page(void)
{
    fputc('\f', out_file);
}

void close_file(void)
{
    fclose(out_file);
}

コード

sample.c

#include "temp.h"
#include <stdio.h>
#include <stdlib.h>

static int lineno = 1;

int main(int argc, char *argv[])
{
    FILE *in_file;
    char line[100];
    char *str_ptr;

    if(argc != 3){
        fprintf(stderr, "Error");
        exit (8);
    }    
    argv++;
    in_file = fopen(*argv, "r");
    if(in_file == NULL){
        fprintf(stderr, "Error: Unable to open input file '%s'\n", *argv);
        exit (8);
    }
    argv++;
    open_file(*argv);
    define_header("OUTPUT FILE");
    lineno++;
    while (1){
        str_ptr = fgets(line, sizeof(line), in_file);
        if(str_ptr == NULL){
            break;
        }
        if(lineno > 10){
            page();
            lineno = 1;
        }
        print_line(line);
        lineno++;
    }
    fclose(in_file);
    close_file();
    return (0);
}

Makefile

CC=cc
CFLAGS=-g
OBJS=sample.o temp.o

all: sample

sample: $(OBJS)
 $(CC) $(CFLAGS) -o sample $(OBJS)

sample.o: temp.h sample.c

temp.o: temp.c

clean:
 rm -f sample sample.o temp.o

入出力結果(Terminal)

$ make
cc -g   -c -o sample.o sample.c
cc -g   -c -o temp.o temp.c
cc -g -o sample sample.o temp.o
$ ./sample sample.c sample.c.txt
$ ./sample temp.c temp.c.txt
$ ./sample temp.h temp.h.txt
$ cat -nv sample.c.txt temp.c.txt temp.h.txt
     1 HEAD: OUTPUT FILE
     2 #include "temp.h"
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 static int lineno = 1;
     7 
     8 int main(int argc, char *argv[])
     9 {
    10     FILE *in_file;
    11 ^L    char line[100];
    12     char *str_ptr;
    13 
    14     if(argc != 3){
    15         fprintf(stderr, "Error");
    16         exit (8);
    17     }    
    18     argv++;
    19     in_file = fopen(*argv, "r");
    20     if(in_file == NULL){
    21 ^L        fprintf(stderr, "Error: Unable to open input file '%s'\n", *argv);
    22         exit (8);
    23     }
    24     argv++;
    25     open_file(*argv);
    26     define_header("OUTPUT FILE");
    27     lineno++;
    28     while (1){
    29         str_ptr = fgets(line, sizeof(line), in_file);
    30         if(str_ptr == NULL){
    31 ^L            break;
    32         }
    33         if(lineno > 10){
    34             page();
    35             lineno = 1;
    36         }
    37         print_line(line);
    38         lineno++;
    39     }
    40     fclose(in_file);
    41 ^L    close_file();
    42     return (0);
    43 }
     1 HEAD: OUTPUT FILE
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 
     5 static FILE *out_file;
     6 
     7 void open_file(char *name)
     8 {
     9     out_file = fopen(name, "w");
    10     if(out_file == NULL){
    11 ^L        fprintf(stderr, "Error: Unable to output file '%s'\n", name);
    12         exit (8);
    13     }
    14 }
    15 
    16 void define_header(char *heading)
    17 {
    18     fprintf(out_file, "HEAD: %s\n", heading);
    19 }
    20 
    21 ^Lvoid print_line(char *line)
    22 {
    23     fprintf(out_file, "%s", line);
    24 }
    25 
    26 void page(void)
    27 {
    28     fputc('\f', out_file);
    29 }
    30 
    31 ^Lvoid close_file(void)
    32 {
    33     fclose(out_file);
    34 }
     1 HEAD: OUTPUT FILE
     2 extern void open_file(char *name);
     3 extern void define_header(char *heading);
     4 extern void print_line(char *line);
     5 extern void page(void);
     6 extern void close_file(void);
$

0 コメント:

コメントを投稿