最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++模擬Linux Shell編寫(xiě)一個(gè)自定義命令

 更新時(shí)間:2022年12月05日 08:57:01   作者:DEFAULT  
這篇文章主要介紹了C++如何模擬Linux Shell實(shí)現(xiàn)編寫(xiě)一個(gè)自定義命令,本文通過(guò)實(shí)例代碼進(jìn)行命令行解析,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

本文將根據(jù)C++模擬Linux Shell寫(xiě)一個(gè)自定義命令,下面是示例代碼,需要的可以參考一下

示例代碼

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "stdarg.h"
using namespace std;

#define MAXLEN 200

void write2File(const std::string &file_string, const std::string str_content);
void readFromFile(string file_string);
string getParamStr(char *ch_pt);
void ProcessByPattern(char *ptr, ...);

/*如果不存在file,則會(huì)在當(dāng)前文件夾下創(chuàng)建file*/
void write2File(const std::string &file_string, const std::string str_content)
{
    if (file_string.empty())
    {
        cout << "empty file string name!" << endl;
        return;
    }
    else if (str_content.empty())
    {
        cout << "empty content string!" << endl;
        return;
    }

    std::ofstream OsWrite(file_string, std::ofstream::app);
    OsWrite << str_content;
    OsWrite << std::endl;
    OsWrite.close();
}

void readFromFile(string file_string)
{
    if (file_string.empty())
    {
        cout << "empty file string name!" << endl;
        return;
    }

    string line;

    std::ifstream labels(file_string.c_str());
    if (!labels.is_open())
    {
        cout << "maybe the file is not exist, can not open the file! " << endl;
        return;
    }

    while (std::getline(labels, line))
    {
        cout << line << endl;
    }
}

string getParamStr(char *ch_pt)
{
    string str;
    char *ptr = new char[MAXLEN];

    ptr = ch_pt;
    str = ptr;

    cout << "parameter: " << str << endl;
    return str;
}

/* ... : 不定參數(shù) */
void ProcessByPattern(char *ptr, ...)
{
    string pattern_str = getParamStr(ptr);
    va_list ap;
    va_start(ap, ptr);

    if (pattern_str == "-r")
    {
        // va_arg(ap, type): 獲取下一個(gè)type類型的參數(shù)
        char *para_ptr = va_arg(ap, char *);
        string readFileStr = getParamStr(para_ptr);
        readFromFile(readFileStr);
    }
    else if (pattern_str == "-w")
    {
        char *file_ptr = va_arg(ap, char *);
        char *cont_ptr = va_arg(ap, char *);

        string filename = getParamStr(file_ptr);
        string cont_str = getParamStr(cont_ptr);
        write2File(filename, cont_str);
    }
    else
    {
        cout << "pattern is empty or pattern number is wrong" << endl;
    }

    va_end(ap);
}

int main(int argc, char *argv[])
{
    // cout<<argc<<endl;
    // cout<<argv[0]<<endl;
    // cout<<argv[1]<<endl;
    if (argc < 2)
    {
        cout << "no arguments pass throught command line" << endl;
        return -1;
    }

    cout << "請(qǐng)輸入模式和參數(shù):" << endl;
    cout << "如: -r filename, 即從filename逐行讀取內(nèi)容并打印" << endl;
    cout << "-w filename content, 向filename寫(xiě)入content" << endl;
    cout << "若寫(xiě)入的文件對(duì)象不存在,則其將會(huì)被創(chuàng)建" << endl;

    ProcessByPattern(argv[1], argv[2], argv[3]);

    return 0;
}

g++ mine_shell_0.1.cpp -o mine_shell_0.1

./mine_shell_0.1 -w y.log 99999999999999999999999999

./mine_shell_0.1 -r y.log  
99999999999999999999999999

想讓它更像shell命令的話,三種方式:

  • 軟鏈接
  • bashrc中的別名
  • 把它移動(dòng)到系統(tǒng)環(huán)境目錄下

到此這篇關(guān)于C++模擬Linux Shell編寫(xiě)一個(gè)自定義命令的文章就介紹到這了,更多相關(guān)C++自定義命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

邳州市| 郸城县| 剑阁县| 五大连池市| 洪泽县| 海伦市| 古田县| 铁力市| 大兴区| 崇阳县| 桑植县| 固原市| 古丈县| 翁牛特旗| 清河县| 玛多县| 江北区| 建湖县| 南江县| 大港区| 林州市| 蓝山县| 五家渠市| 韶关市| 岗巴县| 林口县| 吉林市| 静安区| 砀山县| 武城县| 洪雅县| 奎屯市| 玉屏| 藁城市| 达日县| 海晏县| 大宁县| 志丹县| 城步| 凤庆县| 马龙县|