#include #include #include #include #include #include #include const char default_input[] = "/proc/net/dev"; int main(int argc, const char **argv) { const char *input = default_input; /* "usage" */ if (argc < 2) { printf("Warning: no file specified, defaulting to %s\n", default_input); } else { input = argv[1]; printf("Info: using %s as specified\n", argv[1]); } int file = open(input, 0); if (file < 0) { printf("Error: unable to open %s: %s\n", input, strerror(errno)); return 1; } else { ssize_t ret; ssize_t current = 0; ssize_t extra = 0; printf("Info: %s opened successfully\n", input); /* this is ugly but oh well */ #define bufsize (8000) char buf[bufsize+1] = ""; while ((ret = read(file, buf, bufsize)) > 0) { printf("Read: %u\n", ret); char *newline = strchr(buf, '\n'); if (newline) { current += (newline-buf); *newline = '\0'; extra = ret-(newline-buf+1); printf("Found newline: %u char-long line: with %u extra chars:\n%s\n", current, extra, buf); lseek(file, -extra, SEEK_CUR); current = 0; } } printf("Final position: %u\n", lseek(file, 0, SEEK_CUR)); close(file); } return 0; }