diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2016-02-28 13:03:40 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2016-02-28 13:03:40 +1300 |
commit | 7208f6fd2d62bef16edbafd327e7e0d4c13b7966 (patch) | |
tree | 4c87ce5bcdc9cc44022d2cd06fbab57a56507d96 /cfd.c | |
download | cat-7208f6fd2d62bef16edbafd327e7e0d4c13b7966.tar.gz cat-7208f6fd2d62bef16edbafd327e7e0d4c13b7966.zip |
First commit of that cat(1) clone I'm making
Diffstat (limited to 'cfd.c')
-rw-r--r-- | cfd.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -0,0 +1,30 @@ +#include "cat.h" + +/* Function writes the contents of an opened file descriptor to stdout */ +int cfd(int fd, void *buf) { + int br; + + /* Use the buffer to read the file in blocks, writing each block to stdout + * as we go */ + while ((br = read(fd, buf, BUFLEN)) > 0) { + fwrite(buf, 1, br, stdout); + } + + /* If the last return value for br() was -1, there was an error; 0 is what + * we expect */ + if (br == -1) { + perror(__FUNCTION__); + return -1; + } + + /* Force a write of any still-buffered data to stdout */ + if (fflush(stdout) != 0) { + perror(__FUNCTION__); + return -1; + } + + /* Return success, since apparently nothing went wrong before we got here + * */ + return 0; +} + |