#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

// We use the frequently encountered convention that a zero exit
// status indicates success while a non-zero exit status
// indicates a failure.

int main(int argc, char*argv[]) {

  int out_fd;
  int written;

  if (argc != 3) {
    printf("usage: %s FILE TEXT\n", argv[0]);
    exit(1);
  }

  char *file = argv[1];

  if ((out_fd = open(file, O_WRONLY | O_SYNC | O_CREAT, 00644)) < 0) {
    printf("%s: file open failed\n", file);
    exit(1);
  }

  char * toBeWritten = argv[2];

  written = write(out_fd, toBeWritten, strlen(toBeWritten));

  if (written < strlen(toBeWritten)) {
    printf("%s: write failed\n", file);
    exit(1);
  } 

  if (close(out_fd) < 0) {
    printf("%s: close failed\n", file);
    exit(1);
  }

  printf("Text %s successfully written to %s\n", toBeWritten, file);
  return 0;
}
