tee
tee是脚本里很有用的工具(交互模式其实也很有用,不过我不怎么常用)。它会从标准输入读入,向标准输出和指定的文件输出
实现的思路很简单,不断地读取标准输入,write至标准输出和创建的文件标识符就可以。
不过这只是自己玩玩的,和GNU的tee还是差远了:)
实现
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#define MAX_BUFFER 1024
int main(int argc,char** argv){
int fd,readbyte;
char buffer[MAX_BUFFER];
if(argc != 2){
printf("Usage:mytee FILE\n");
exit(EXIT_FAILURE);
}
fd = open(argv[1],O_CLOEXEC|O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);
if(fd == -1){
perror("open failed!");
}
while(1){
readbyte = read(STDIN_FILENO,buffer,MAX_BUFFER);
if(readbyte == 0){
break;
}
if(write(STDOUT_FILENO,buffer,readbyte) == -1){
perror("write to stdout failed!");
}
if(write(fd,buffer,readbyte) == -1){
perror("write to file failed!");
}
}
if(readbyte < 0){
perror("read from stdin failed!");
}
close(fd);
return EXIT_SUCCESS;
}