#include <stdio.h>
int
main(int argc, char *argv[]) {
FILE *f;
int i;
f = fopen("numbers", "w");
if (f == NULL) {
fprintf(stderr, "Can not openm file numbers for writing\n");
return 1;
}
for (i = 1; i <= 1000; i++)
fprintf(f, "%d\n", i);
fclose(f);
return 0;
}
#include <stdio.h>
void
count(char *filename) {
int characters = 0;
int lines = 0;
int ch;
FILE *f;
f = fopen(filename, "r");
if (f == NULL) {
fprintf(stderr, "count: %s: ", filename);
perror("");
return;
}
while ((ch = fgetc(f)) != EOF) {
characters++;
if (ch == '\n')
lines++;
}
fclose(f);
printf("%s: %d characters %d lines\n", filename, characters, lines);
}
int
main(int argc, char *argv[]) {
int i;
for (i = 1; i < argc; i++)
count(argv[i]);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
enum {
DEFAULT_NLINES = 10,
MAX_LINE_LENGTH = 256
};
void
head(char *filename, int n_lines) {
FILE *f;
int ch, lines;
f = fopen(filename, "r");
if (f == NULL) {
fprintf(stderr, "grep: %s: ", filename);
perror("");
return;
}
lines = 0;
while ((ch = fgetc(f)) != EOF) {
putchar(ch);
if (ch == '\n')
lines++;
if (lines >= n_lines)
break;
}
fclose(f);
}
/*
* Or using fgets which has the disadvantage
* of a maximum line length.
*/
void
head1(char *filename, int n_lines) {
FILE *f;
int line_number;
char line[MAX_LINE_LENGTH+2];
f = fopen(filename, "r");
if (f == NULL) {
fprintf(stderr, "grep: %s: ", filename);
perror("");
return;
}
for (line_number = 0; line_number < n_lines; line_number++) {
if (fgets(line, MAX_LINE_LENGTH, f) == NULL)
break;
fputs(line, stdout);
}
fclose(f);
}
void
usage() {
fprintf(stderr, "Usage: head [-n lines] ");
exit(1);
}
int
main(int argc, char *argv[]) {
int n_lines = DEFAULT_NLINES;
char *filename;
if (argc != 2 && argc != 4)
usage();
if (argc == 2)
filename = argv[1];
else {
if (strcmp(argv[1], "-n") != 0)
usage();
n_lines = atoi(argv[2]);
filename = argv[3];
}
head(filename, n_lines);
return 0;
}