예제 #1
0
int main(int argc, char *argv[])
{
  if (argc != 3)
    invocation_error(argv[0], "[input file] [output file]");
  puts(argv[0]);

  Parts db;
  time_t  start_time  = time(NULL);
  clock_t start_clock = clock();
  if ((db = load_parts(argv[1])) == NULL)
    print_error( __FILE__, argv[1]);
  time_t  end_time  = time(NULL);
  clock_t end_clock = clock() - start_clock;

  printf("p %g:\tr %g:\tReading %ld from %s\n", end_clock / (double) CLOCKS_PER_SEC, difftime(end_time, start_time),  size(db), argv[1]);

  start_time  = time(NULL);
  start_clock = clock();
  if (dump(argv[2], db) != 0)
    print_error( __FILE__, argv[2]);
  end_time  = time(NULL);
  end_clock = clock() - start_clock;

  printf("p %g:\tr %g:\tWriting %s\n", end_clock / (double) CLOCKS_PER_SEC, difftime(end_time, start_time), argv[2]);
  puts("");
  return 0;
}
예제 #2
0
int main(int argc, char *argv[])
{
  if (argc != 3)
    invocation_error(argv[0], "[output file] [size]");

  char *output_file = argv[1];
  size_t records = atol(argv[2]);
  size_t i, part_number, noun_count, adj_count;
  char *nouns[NOUN_MAX], noun_file_content[NOUN_BYTES];
  char *adjectives[ADJ_MAX], adj_file_content[ADJ_BYTES];
  int rc;
  Part p;

  Parts db = new_db(CHUNK_SIZE);

  noun_count = get_word_pointers(nouns, NOUN_FILE, noun_file_content, NOUN_BYTES);
  adj_count = get_word_pointers(adjectives, ADJ_FILE, adj_file_content, ADJ_BYTES);

  init_locale();
  srand((unsigned int) time(NULL));
  remove(output_file);

  for (part_number = 0, i = 0; i < records; i++) {
    part_number = jagged_sequence(part_number);
    p = set_part(part_number,
          random_part_name(nouns, noun_count, adjectives, adj_count),
          random_int(),
          random_int());
    printf("%9ld:  ", i + 1);
    print_part(p);
    if ((rc = insert_part(db, p))) {
      fprintf(stderr, "%s: %d  insert_part() failed: return code %d on iteration %ld\n",
          __FILE__, __LINE__, rc, i);
      destroy_db(db);
      exit(EXIT_FAILURE);
    }
    if (i % CHUNK_SIZE == 0) {
      if (flush_to_disk(output_file, db) != 0) {
        destroy_db(db);
        exit_error(argv[0], output_file);
      }
    }
  }

  if (flush_to_disk(output_file, db) != 0) {
    destroy_db(db);
    exit_error(argv[0], output_file);
  }
  destroy_db(db);

  return 0;
}
예제 #3
0
int main(int argc, char *argv[])
{
  if (argc != 4)
    invocation_error(argv[0], "[input file 1] [input file 2] [output file]"); 

  char *output_filename = argv[3];
  struct stat file1_stat, file2_stat;
  FileInfo larger, smaller;
  off_t record_size = (off_t)get_part_record_size();

  validate_input_file(argv[1], &file1_stat, record_size);
  validate_input_file(argv[2], &file2_stat, record_size);

  sort_input_files(argv[1], &file1_stat, argv[2], &file2_stat, &larger, &smaller, record_size);

  Part out_buffer = (Part)malloc(larger.size + smaller.size);
  if (!out_buffer)
    memory_error(__FILE__, __LINE__, __func__);

  if (read_input(&larger, out_buffer, record_size) != 0) {
    free(out_buffer);
    exit(EXIT_FAILURE);
  }

  Part in_buffer = malloc(smaller.size);
  if (!in_buffer) {
    free(out_buffer);
    memory_error(__FILE__, __LINE__, __func__);
  }

  if (read_input(&smaller, in_buffer, record_size) != 0) {
    free(in_buffer);
    free(out_buffer);
    exit(EXIT_FAILURE);
  }

  size_t out_count = merge_buffers(in_buffer, smaller.count, out_buffer, larger.count);
  free(in_buffer);

  if (write_output(output_filename, out_buffer, out_count, record_size) != 0) {
    free(out_buffer);
    exit(EXIT_FAILURE);
  }

  free(out_buffer);
  return 0;
}
예제 #4
0
int main(int argc, char *argv[])
{
  char *program = argv[0];
  if (argc != 2)
    invocation_error(program, "[file]");

  char *iname  = argv[1];
  FILE *istream;
  if ((istream = fopen(iname, "rb")) == NULL)
    exit_error(errno, program, iname);

  char *oname = build_output_file_name(iname);
  FILE *ostream;
  if ((ostream = fopen(oname, "wb")) == NULL) {
    print_error(errno, program, oname);
    free(oname);
    if (fclose(istream) == EOF)
      exit_error(errno, program, iname);
    exit(EXIT_FAILURE);
  }

  /*
   * Process
   */
  if (is_rle_file(oname))
    encode_rle(istream, ostream);
  else
    decode_rle(istream, ostream);

  /*
   * Clean up
   */
  free(oname);

  if (fclose(istream) == EOF)
    print_error(errno, program, iname);

  if (fclose(ostream) == EOF)
    exit_error(errno, program, oname);

  return 0;
}