2014年4月2日水曜日

開発環境

C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅣ部(高度なプログラミング概念)の16章(ファイル入出力)、16.13(プログラミング実習)、実習 16-4.を解いてみる。

その他参考書籍

実習 16-4.

コード(BBEdit, Emacs)

ascii2bin.cpp

#include <iostream>
#include <cstdio>

int main(int argc, char *argv[])
{
  std::FILE *in_file;
  std::FILE *out_file;
  char ch;

  if (argc != 3) {
    std::cerr << "2つのファイルを指定してください\n";
    exit (8);
  }

  in_file = fopen(argv[1], "r");
  if (in_file == NULL) {
    std::cerr << "Unable to open '" << argv[1] << "'\n";
    exit (8);
  }
  
  out_file = fopen(argv[2], "wb");
  if (out_file == NULL) {
    std::cerr << "Unable to open '" << argv[2] << "'\n";
    exit (8);
  }

  while ((ch = fgetc(in_file)) != EOF)
    std::fputc(ch, out_file);

  std::fclose(in_file);
  std::fclose(out_file);

  return (0);
}

bin2ascii.cpp

#include <iostream>
#include <cstdio>

int main(int argc, char *argv[])
{
  std::FILE *in_file;
  std::FILE *out_file;
  char ch;
  
  if (argc != 3) {
    std::cerr << "2つのファイルを指定してください\n";
    exit (8);
  }

  in_file = std::fopen(argv[1], "rb");
  if (in_file == NULL) {
    std::cerr << "Unable to open '" << argv[1] << "'\n";
    exit (8);
  }

  out_file = std::fopen(argv[2], "w");
  if (out_file == NULL) {
    std::cerr << "Unable to open '" << argv[2] << "'\n";
    exit (8);
  }

  while ((ch = fgetc(in_file)) != EOF)
    fputc(ch, out_file);

  std::fclose(in_file);
  std::fclose(out_file);
  return (0);
}

Makefile

#
# FSFのg++コンパイラ用のMakefile
#
CC=g++
CFLAGS=-g -Wall
all: ascii2bin bin2ascii

ascii2bin: ascii2bin.cpp
 ${CC} ${CFLAGS} -o ascii2bin ascii2bin.cpp

bin2ascii: bin2ascii.cpp
 ${CC} ${CFLAGS} -o bin2ascii bin2ascii.cpp

clean:
 rm ascii2bin bin2ascii

入出力結果(Terminal)

$ make
g++ -g -Wall -o ascii2bin ascii2bin.cpp
g++ -g -Wall -o bin2ascii bin2ascii.cpp
$ cat numbers.dat
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
$ ./ascii2bin numbers.dat numbers1.dat 
$ cat numbers.dat
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
$ cat numbers1.dat
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
$ ./bin2ascii numbers1.dat numbers2.dat
$ cat numbers1.dat 
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
$ cat numbers2.dat 
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
$

0 コメント:

コメントを投稿