Source File: tee.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <fmt/core.h>
#include <unistd.h>

void dump_file(std::istream& in, std::ostream& out_file) {
  std::string line;

  while(in) {
    getline(in, line);
    line.append("\n", 1);
    std::cout.write(line.c_str(), line.size());
    out_file.write(line.c_str(), line.size());
  }
}

int main(int argc, char* argv[]) {
  int opt = 0;
  auto open_mode = std::ios::trunc;

  while((opt = getopt(argc, argv, "a")) != -1) {
    switch(opt) {
      case 'a':
        open_mode = std::ios::app;
        break;
      default:
        fmt::print("USAGE: tee -a file > otherfile");
        return 1;
    }
  }

  std::ofstream out_file{argv[optind], open_mode | std::ios::binary };
  dump_file(std::cin, out_file);
}