The tee
CLI read from stdin, then write date to stdout and the file name specified.
#include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { if (argc != 2) { fprintf(stderr, "%s\n", "Output file name required"); return 1; } char buffer[1024] = {0}; int outfd = open(argv[1], O_CREAT | O_WRONLY | O_TRUNC, 0644); if (outfd == -1) { fprintf(stderr, "%s\n", "Failed to create output file"); return 2; } ssize_t nread = 0; while((nread = read(STDIN_FILENO, buffer, 1024)) != 0) { if (write(STDOUT_FILENO, buffer, nread) != nread) { fprintf(stderr, "%s\n", "Failed to write to stdout"); return 3; } if (write(outfd, buffer, nread) != nread) { fprintf(stderr, "%s\n", "Failed to write to file"); return 4; } }; return 0; }
Use gcc
to compile and run:
$ gcc main.c -o mytee
Test:
$ date | ./mytee log.txt Mon 27 Apr 2020 10:20:55 PM EDT $ cat log.txt Mon 27 Apr 2020 10:20:55 PM EDT
Top comments (2)
Of course, Linux has a tee(2) system call (and I mean system call, not the tee(1) command...)
nice, I didn't know that, thank you Andrew :D