c++ 编写管道命令的技巧

       shell里的管道非常方便和好用,但不是所有命令都可以直接放在管道符("|")后面接收管道输出的数据。能接收管道输出的数据并正确处理的命令称之为管道命令,这需

要命令本身支持,如ls就不是管道命令。下面以c++为例说一下怎么编写管道命令.

       管道其实就是把上一个命令的标准输出改变为下一个命令的标准输入。那么命令只要支持从标准输入读取数据并处理,那么这个命令就支持管道,是个管道命令。c++使用 std::cin 来读取来自标准输入的数据,见如下代码片段,逐行获取标准输入的数据,然后写入leveldb中:

/*从管道读取数据写入leveldb*/
int pipe_to_db( const string sep, const string db_path) {
    nosql db(db_path);
    string row;
    int e;
    vector<string> v_f;
    while(!cin.eof()) {
        getline(cin, row);
        e=row.find_last_not_of("\n");
        row = row.substr(0, e+1);

        v_f = explode(sep, row);
        if (v_f.size() < 2) {
            continue;
        }
        db.put(v_f[0], v_f[1]);
    }

    return 0;
}


这里有个问题需要注意一下,那就是结束条件,这里使用的遇到文件结束符就不再读取数据。实际测试用管道符接在awk命令后,不会进入死循环,数据正常。若是键盘测试,需要手动输入文件结束符(linux 下:ctrl+d, windows下:ctrl+z)来结束循环



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值