diff --git a/src/userland/cli/tail.c b/src/userland/cli/tail.c index 83fe4f3..3fba348 100644 --- a/src/userland/cli/tail.c +++ b/src/userland/cli/tail.c @@ -6,13 +6,13 @@ #include int main(int argc, char *argv[]) { + // print all lines if (argc == 2) { if (strcmp(argv[1], "--help") == 0) { - printf("-This command reads from the front of the file\n"); + printf("-This command reads from the back of the file\n"); printf("-Use: tail [-n] [-number of lines] [file]\n"); return 0; } - //print everything FILE *fp = fopen(argv[1], "r"); if (fp == NULL) { printf("File not found\n"); @@ -25,7 +25,7 @@ int main(int argc, char *argv[]) { fclose(fp); return 0; } - // only print first lines + // only print last lines if (argc == 4 && strcmp(argv[1], "-n") == 0) { int lines = atoi(argv[2]); if (lines <= 0) { @@ -39,10 +39,24 @@ int main(int argc, char *argv[]) { return 1; } + // count total lines + int count = 0; char buf[1024]; - while (lines > 0 && fgets(buf, sizeof(buf), fp)) { - printf("%s", buf); - lines--; + while (fgets(buf, sizeof(buf), fp)) { + count++; + } + + // back to start of file + fseek(fp, 0, SEEK_SET); + + // check if lines are the end lines + int skip = count - lines; + int i = 0; + while (fgets(buf, sizeof(buf), fp)) { + if (i >= skip) { + printf("%s", buf); + } + i++; } fclose(fp);