int fd, len, nwrite;
struct stat fdata;
...
- /* check argument, open destination file and check stdin and stdout */
- if ((argc - optind) != 1) { /* There must be one argument */
- printf("Wrong number of arguments %d\n", argc - optind);
- usage();
- }
- fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0644);
- if (fd == -1) {
- printf("opening file %s falied: %s", argv[1], strerror(errno));
- exit(EXIT_FAILURE);
- }
- if (fstat(STDIN_FILENO, &fdata) < 0) {
- perror("cannot stat stdin");
- exit(EXIT_FAILURE);
- }
- if (!S_ISFIFO(fdata.st_mode)) {
- fprintf(stderr, "stdin must be a pipe\n");
- exit(EXIT_FAILURE);
- }
- if (fstat(STDOUT_FILENO, &fdata) < 0) {
- perror("cannot stat stdout");
- exit(EXIT_FAILURE);
- }
- if (!S_ISFIFO(fdata.st_mode)) {
- fprintf(stderr, "stdout must be a pipe\n");
- exit(EXIT_FAILURE);
- }
/* tee loop */
while (1) {
/* copy stdin to stdout */