1 /* `head.c` - copy the first part of files
2 Copyright (c) 2022, Alan Potteiger
3 See `LICENSE` for copyright and license details */
5 #define _POSIX_C_SOURCE 200809L
13 static const char *usage
= {
14 "usage: head [-n number] [file...]\n"
17 static char *strstdin
= "stdin";
20 main(int argc
, char *argv
[])
35 while ((ch
= getopt(argc
, argv
, "n:")) != -1) {
39 n
= (int) strtol(optarg
, &linep
, 10);
40 if (optarg
== linep
) {
41 fprintf(stderr
, "head: invalid line number\n");
46 fprintf(stderr
, "head: number is required to "
47 "be a positive decimal integer.\n");
65 s
= getline(&linep
, &linecapp
, stdin
);
68 fwrite(linep
, s
, 1, stdout
);
78 /* head for listed input files */
79 for (;argc
> 0; argc
-- && argv
++) {
80 if (argv
[0][0] == '-' && argv
[0][1] == '\0') {
84 f
= fopen(argv
[0], "r");
87 fprintf(stderr
, "head: %s: %s\n", argv
[0],
93 printf("==> %s <==\n", argv
[0]);
95 printf("\n==> %s <==\n", argv
[0]);
99 s
= getline(&linep
, &linecapp
, f
);
102 fwrite(linep
, s
, 1, stdout
);