diff --git a/pipetester.c b/pipetester.c new file mode 100644 index 0000000..833d61e --- /dev/null +++ b/pipetester.c @@ -0,0 +1,61 @@ + +#include +#include +#include +#include + +void error(char *msg) +{ + write(2, msg, strlen(msg)); +} + +int main(void) +{ + int fd_in = STDIN_FILENO; + int fd_out = STDOUT_FILENO; + struct stat statbuf_in; + struct stat statbuf_out; + + if (fstat(fd_in, &statbuf_in) == -1) + { + perror("fstat"); + return (1); + } + error("STDIN File type: "); + + switch (statbuf_in.st_mode & S_IFMT) { + case S_IFBLK: error("block device\n"); break; + case S_IFCHR: error("character device\n"); break; + case S_IFDIR: error("directory\n"); break; + case S_IFIFO: error("FIFO/pipe\n"); break; + case S_IFLNK: error("symlink\n"); break; + case S_IFREG: error("regular file\n"); break; + case S_IFSOCK: error("socket\n"); break; + default: error("unknown?\n"); break; + } + + + error("\n"); + + if (fstat(fd_out, &statbuf_out) == -1) + { + perror("fstat"); + return (1); + } + +error("STDOUT File type: "); + + switch (statbuf_out.st_mode & S_IFMT) { + case S_IFBLK: error("block device\n"); break; + case S_IFCHR: error("character device\n"); break; + case S_IFDIR: error("directory\n"); break; + case S_IFIFO: error("FIFO/pipe\n"); break; + case S_IFLNK: error("symlink\n"); break; + case S_IFREG: error("regular file\n"); break; + case S_IFSOCK: error("socket\n"); break; + default: error("unknown?\n"); break; + } + + + return (0); +}