如何在Linux用C++写一个小工具

来源:互联网 发布:淘宝店铺旺旺更改昵称 编辑:程序博客网 时间:2024/05/19 00:49

众所周知,Linux系统命令行下自带几千个功能强大,使用方便的命令。那这些命令是如何实现的呢,下面我就通过一个简单的例子说明。

例如我们要实现一个简单的功能,通过工具在一个文本中找出我们指定的关键字,并打印出关键词所在行。(ps:grep命令可以高效的完成这一任务,在此暂且忽略)

我们所使用的编译器是GCC,使用语言为C++。以下是代码以及编译过程。

$ cat findKeyword.cpp

#include<iostream>

#include<string>

#include<fstream>


#define MAX_LEN 512


using namespace std;

int main(int argc, char **argv)

{

    if(0 == argc || NULL == argv)

    {

        cout<<"Usage: "<<argv[0]<<" fileName keyword"<<endl;

        return -1;

    }

    ifstream infile(argv[1]);

    string keyword(argv[2]);

    if(!infile.is_open())

    {

        cout<<"error in open file."<<endl;

        return -2;

    }

    int lineNum = 0;

    int countKeyword = 0;

    string line="";

    while(getline(infile,line))

    {

        lineNum++;

        if(line.find(keyword) != string::npos)

        {

            countKeyword++;

            if(!line.empty())

            {

                cout<<"(line: "<<lineNum<<") "<<line<<endl;

            }

        }

     } 

     infile.close();

     return 0;

}

使用g++命令进行编译。

$ g++ findKeyword.cpp -o findkeyword

$ ls

findKeyword.cpp findkeyword

下面测试一下功能是否正确:

写一个testfile.txt,内容如下

Today is a good day.

I meet my good friends.

They are

LC

YX

WMY

and

we have a good meal cooked by LC.

执行findkeyword命令。

$ ./findkeyword test.txt LC

(line: 4) LC

(line: 8) we have a good meal cooked by LC.

OK,结果是我们预期的。但是,这怎么看都不像是系统自带命令的样子,难道我每次想使用这个命令都得找到它所在的路径吗,那这也太土了。

Of course not。我们要使用环境变量帮我们完成最后一个步骤。

将命令所在路径加入到PATH中去,那后面只要我们登录到终端就可以使用自己的命令,就像使用系统自带命令一样方便。具体步骤如下:

$ vim ~/.bash_profile

在最后两行添加如下内容

PATH=$PATH:/Users/blue/Documents/CPPFILES/mybin

export PATH

其中/Users/blue/Documents/CPPFILES/mybin是命令所在路径。

好了,经过上面的过程,我们在系统上添加了属于我们自己的命令。看下效果把~

新打开一个终端,使用我们自定义的工具就像使用系统命令一样方便。


0 0