#include #include #include #include static void die(const char *reason) { fprintf(stderr, "Fatal: %s\n", reason); exit(1); } static unsigned long find_line(const char *line, unsigned long len) { unsigned long res = 0; do { res++; if (*line == '\n') break; line++; } while (--len); return res; } int main(int argc, char **argv) { struct stat st; char *buf; unsigned long len; long longest = 0; char *line = ""; int lineno = 0, i; if (fstat(0, &st)) die("stat"); if (!S_ISREG(st.st_mode)) die("Not a regularfile"); len = st.st_size; buf = malloc(len); if (!buf) die("malloc failed"); if (read(0, buf, len) != len) die("read failed"); for (i = 1; len; i++) { unsigned long linelen; linelen = find_line(buf, len); if (linelen > longest) { longest = linelen; line = buf; lineno = i; } buf += linelen; len -= linelen; } printf("Longest line is %d (%lukB)\n", lineno, (longest+512) / 1024); printf(" '%.*s'\n", (int) longest-1, line); return 0; }