#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h> #define BUF_SIZE 1024 void tee(char *filename)
{
char szBuf[BUF_SIZE];
int fd = open(filename, O_RDWR | O_CREAT | O_APPEND, 0664);
while(1) {
memset(szBuf, 0, BUF_SIZE);
read(STDIN_FILENO, szBuf, BUF_SIZE);
fprintf(stderr, "%s", szBuf);
write(fd, szBuf, strlen(szBuf));
}
} int main(int argc, char **argv)
{
if (argc != 2 || !strcmp(argv[1], "--help")) {
printf("Usage:%s [filename]\n", argv[0]);
printf("\tfilename:output file\n");
return 0;
}
tee(argv[1]);
return 0;
}

尚需学习:输入一个文件名,判断当前目录是否包含此文件。

更改后的程序,包含功能:如文件已存在,则实现-a命令行选项(tee -a file)在文件结尾处追加数据。

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h> #define BUF_SIZE 1024 void tee(int argc, char *filename)
{
char szBuf[BUF_SIZE];
int fd;
if (argc == 2) {
fd = open(filename, O_RDWR | O_CREAT, 0664);
}
if (argc == 3){
fd = open(filename, O_RDWR | O_APPEND);
}
while(1) {
memset(szBuf, 0, BUF_SIZE);
read(STDIN_FILENO, szBuf, BUF_SIZE);
fprintf(stderr, "%s", szBuf);
write(fd, szBuf, strlen(szBuf));
}
} int main(int argc, char **argv)
{
if ((argc != 2 && argc != 3) || !strcmp(argv[1], "--help")) {
printf("Usage:%s [filename]\n", argv[0]);
printf("\tfilename:output file\n");
return 0;
}
if (argc == 2) {
int iRet = access(argv[1], F_OK); // 判断文件是否存在
if (iRet == 0) {
printf("File Existed\n");
printf("please use [-a] option\n");
printf("Usage:%s [-a] [filename]\n", argv[0]);
return 0;
}
tee(argc, argv[1]);
}
else {
tee(argc, argv[2]);
}
return 0;
}

  

4-1:实现tee命令的更多相关文章

  1. tee命令

    tee命令 http://liubin.blog.51cto.com/282313/131298 https://en.wikipedia.org/wiki/Tee_(command)

  2. tee 命令基本使用方法、输出到多个文件

    功能说明:读取标准输入的数据,并将其内容输出成文件.语  法:tee [-ai][--help][--version][文件...]补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出 ...

  3. Linux Shell脚本入门:tee命令

    用途说明   在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,这时我们就不能看到输出了,如果我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee ...

  4. linux tee 命令详解

    man tee: NAME tee - read from standard input and write to standard output and files SYNOPSIS tee [OP ...

  5. mysql tee 命令

    tee 命令说明: 用过mysql的应该都会知道mysql有一个叫show 的命令,这个命令应该是SQL标准之外的一个扩展:和这个类似mysql还扩展了一个叫tee的命令. tee的功能是把你的所有输 ...

  6. tee命令使用

    需求描述: 今天在看nginx内容的过程,遇到了tee这个命令,所以查询了下,在这里记录下使用方法. 操作过程: 1.执行以下的命令 [root@testvm ~]# uname -n | tee h ...

  7. Linux tee命令详解

    Linux tee命令 Linux tee命令用于读取标准输入的数据,并将其内容输出成文件.如果文件指定为"-",则将输入内容复制到标准输出 tee指令会从标准输入设备读取数据,将 ...

  8. Mysql 将结果保存到文件 从文件里运行sql语句 记录操作过程(tee 命令的使用)

    1.  有时候我们可能须要记录我们对mysql的操作过程,这时我们能够使用mysql的tee命令 1)第一种情况是在链接数据库的时候使用tee >mysql  -u root  -p  --te ...

  9. tee命令详解

    基础命令学习目录首页 参考:http://man.linuxde.net/tee tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin.简单的说就是把数据重 ...

  10. linux系统中,tee命令的使用

    需求描述: 今天在看nginx内容的过程,遇到了tee这个命令,所以查询了下,在这里记录下使用方法. 操作过程: 1.执行以下的命令 [root@testvm ~]# uname -n | tee h ...

随机推荐

  1. 异常笔记:Hadoop异常 namenode.NameNode: Encountered exception during format

    00:53:47,977 WARN namenode.NameNode: Encountered exception during format: java.io.IOException: Canno ...

  2. angular.js-1初识

    初识AngularJS AngularJS 为了克服HTML在构建页面上的不足,通过新的属性和表达式扩展了 HTML(AngularJS 通过指令扩展了 HTML,且通过表达式绑定数据到 HTML). ...

  3. 第3章 jQuery中的DOM操作

    parent() .parents().closest() 区别示例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  4. springboot+layui实现增删查改

    本文描述springboot和layui的结合,采用了springboot内置的jdbc,根据不同需要可以进行修改:分页采用了layui中自带分页格式! ----------------------- ...

  5. MySQL:数据存在则更新,不存在则插入

    前提:表结构存在主键或唯一索引,插入数据包含主键或唯一索引而导致记录重复插入失败. 单条记录更新插入: ,,) ,b,c; 多条记录批量更新插入: ,,),(,,) ON DUPLICATE KEY ...

  6. 帝国cms发布信息时替换正文IMG图片标签里的ALT内容

    帝国cms发布信息时替换正文IMG图片标签里的ALT内容 在 e/class/userfun.php 里面增加 //替换正文IMG里的ALT内容 function user_imgalt($mid,$ ...

  7. FireDAC的SQLite初探

    // uses FireDAC.VCLUI.Wait  之后, 可不用添加 TFDGUIxWaitCursor TFDConnection          // 数据连接 TFDQuery      ...

  8. Hbase 表的Rowkey设计避免数据热点

    一.案例分析 常见避免数据热点问题的处理方式有:加盐.哈希.反转等方法结合预分区使用. 由于目前原数据第一字段为时间戳形式,第二字段为电话号码,直接存储容易引起热点问题,通过加随机列.组合时间戳.字段 ...

  9. 【Hive六】Hive调优小结

    Hive调优 Hive调优 Fetch抓取 本地模式 表的优化 小表.大表Join 大表Join大表 MapJoin Group By Count(Distinct) 去重统计 行列过滤 动态分区调整 ...

  10. 网站用户行为分析——在Ubuntu下安装MySQL及其常用操作

    安装MySQL 使用以下命令即可进行mysql安装,注意安装前先更新一下软件源以获得最新版本: sudo apt-get update #更新软件源 sudo apt-get install mysq ...