Add mandoc-manpage for head(1) and clean up code

and mark it as finished in the README.
This commit is contained in:
FRIGN 2015-01-25 22:01:26 +01:00
parent 454fab03aa
commit 741d8c9a76
3 changed files with 61 additions and 39 deletions

2
README
View File

@ -33,7 +33,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support,
=* false yes none
#* fold yes none
=* grep yes none
head yes none
=* head yes none
= hostname non-posix none
=* kill yes none
= link yes none

59
head.1
View File

@ -1,18 +1,43 @@
.TH HEAD 1 sbase\-VERSION
.SH NAME
head \- output first part of files
.SH SYNOPSIS
.B head
.RB [ \-n
.IR lines ]
.RI [ file ...]
.SH DESCRIPTION
.B head
writes the first 10 lines of each file to stdout. If no file is given, head
.Dd January 25, 2015
.Dt HEAD 1 sbase\-VERSION
.Sh NAME
.Nm head
.Nd display initial lines of files
.Sh SYNOPSIS
.Nm head
.Op Fl n Ar num
.Op Fl N
.Op Ar file ...
.Sh DESCRIPTION
.Nm
writes
.Ar num
|
.Sy N
lines of each
.Ar file
to stdout.
If no file is given
.Nm
reads from stdin.
.SH OPTIONS
.TP
.BI \-n " lines"
outputs the given number of lines.
.SH SEE ALSO
.IR tail (1)
.Sh OPTIONS
.Bl -tag -width Ds
.It Fl n Ar num | Fl N
Display
.Ar num
|
.Sy N
lines. Default is 10.
.El
.Sh SEE ALSO
.Xr tail 1
.Sh STANDARDS
The
.Nm
utility is compliant with the
.St -p1003.1-2008
specification.
.Pp
The
.Op Fl N
flag is an extension to that specification.

39
head.c
View File

@ -4,15 +4,30 @@
#include <string.h>
#include <unistd.h>
#include "text.h"
#include "util.h"
static void head(FILE *, const char *, long);
static void
head(FILE *fp, const char *str, long n)
{
char *buf = NULL;
size_t size = 0;
ssize_t len;
unsigned long i = 0;
while (i < n && ((len = getline(&buf, &size, fp)) != -1)) {
fputs(buf, stdout);
if (buf[len - 1] == '\n')
i++;
}
free(buf);
if (ferror(fp))
eprintf("%s: read error:", str);
}
static void
usage(void)
{
eprintf("usage: %s [-n lines] [file...]\n", argv0);
eprintf("usage: %s [-n lines] [-N] [file...]\n", argv0);
}
int
@ -54,21 +69,3 @@ main(int argc, char *argv[])
}
return ret;
}
static void
head(FILE *fp, const char *str, long n)
{
char *buf = NULL;
size_t size = 0;
ssize_t len;
unsigned long i = 0;
while (i < n && ((len = getline(&buf, &size, fp)) != -1)) {
fputs(buf, stdout);
if (buf[len - 1] == '\n')
i++;
}
free(buf);
if (ferror(fp))
eprintf("%s: read error:", str);
}