/*
|
|
* Output contents of a file.
|
|
*
|
|
* Compile this file with Visual Studio and run the produced command in
|
|
* console with a file name argument. For example, command
|
|
*
|
|
* cat include\dirent.h
|
|
*
|
|
* will output the dirent.h to screen.
|
|
*
|
|
* Copyright (C) 1998-2019 Toni Ronkko
|
|
* This file is part of dirent. Dirent may be freely distributed
|
|
* under the MIT license. For all details and documentation, see
|
|
* https://github.com/tronkko/dirent
|
|
*/
|
|
#define _CRT_SECURE_NO_WARNINGS
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <dirent.h>
|
|
#include <errno.h>
|
|
#include <locale.h>
|
|
|
|
static void output_file (const char *fn);
|
|
|
|
|
|
int
|
|
main(
|
|
int argc, char *argv[])
|
|
{
|
|
int i;
|
|
|
|
/* Select default locale */
|
|
setlocale (LC_ALL, "");
|
|
|
|
/* Require at least one file */
|
|
if (argc == 1) {
|
|
fprintf (stderr, "Usage: cat filename\n");
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
/* For each file name argument in command line */
|
|
i = 1;
|
|
while (i < argc) {
|
|
output_file (argv[i]);
|
|
i++;
|
|
}
|
|
return EXIT_SUCCESS;
|
|
}
|
|
|
|
/*
|
|
* Output file to screen
|
|
*/
|
|
static void
|
|
output_file(
|
|
const char *fn)
|
|
{
|
|
FILE *fp;
|
|
|
|
/* Open file */
|
|
fp = fopen (fn, "r");
|
|
if (fp != NULL) {
|
|
size_t n;
|
|
char buffer[4096];
|
|
|
|
/* Output file to screen */
|
|
do {
|
|
|
|
/* Read some bytes from file */
|
|
n = fread (buffer, 1, 4096, fp);
|
|
|
|
/* Output bytes to screen */
|
|
fwrite (buffer, 1, n, stdout);
|
|
|
|
} while (n != 0);
|
|
|
|
/* Close file */
|
|
fclose (fp);
|
|
|
|
} else {
|
|
/* Could not open directory */
|
|
fprintf (stderr, "Cannot open %s (%s)\n", fn, strerror (errno));
|
|
exit (EXIT_FAILURE);
|
|
}
|
|
}
|