#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. 【HDOJ 2888】Check Corners(裸二维RMQ)

    Problem Description Paul draw a big m*n matrix A last month, whose entries Ai,j are all integer numb ...

  2. 463. Island Perimeter (5月29日)

    解答 class Solution { public: int islandPerimeter(vector<vector<int>>& grid) { int num ...

  3. chromium之message_pump_win之三

    上一篇分析MessagePumpForUI,参考chromium之message_pump_win之二 MessagePumpForIO,同MessagePumpForUI,也是要实现三个函数 // ...

  4. 学习 Linux_kernel_exploits 小记

    Linux_kernel_exploits+ 功能:自动生成UAF类型漏洞exp文件的工具,目前缺少文档介绍,可以参考test文件下的使用实例,但是源码中缺少dataflowanalyzer模块+ 相 ...

  5. 01-http简介-四层 七层 三次握手

    HTTP简介.请求方法与响应状态码 接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于T ...

  6. angularjs中控制器之间的通信----$on、$emit和$broadcast解析

    $on.$emit和$broadcast使得event.data在controller之间的传递变的简单. $emit只能向parent controller传递event与data $broadca ...

  7. mqtt使用一

    最近做的一个项目用到了mqtt协议,我需要从第三方订阅主题接受消息,还需要自己搭建,mqtt服务器去发布主题.下面就详细介绍一下环境的搭建和使用. 1.mqtt介绍 MQTT是一个基于客户端-服务器的 ...

  8. Python3简单登录接口编写及遇到的问题分享

    1.程序目标 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 2.思路 利用python中的pickle模块,实现用户登录信息(采用dict)和被锁定用户信息(采用list)的存储.所以我预先 ...

  9. Java学习笔记二十四:Java中的Object类

    Java中的Object类 一:什么是Object类: Object类是所有类的父类,相当于所有类的老祖宗,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object ...

  10. java的编码格式

    几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...