C++模擬Linux Shell編寫一個自定義命令
本文將根據(jù)C++模擬Linux Shell寫一個自定義命令,下面是示例代碼,需要的可以參考一下
示例代碼
#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,則會在當(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): 獲取下一個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 << "請輸入模式和參數(shù):" << endl; cout << "如: -r filename, 即從filename逐行讀取內(nèi)容并打印" << endl; cout << "-w filename content, 向filename寫入content" << endl; cout << "若寫入的文件對象不存在,則其將會被創(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中的別名
- 把它移動到系統(tǒng)環(huán)境目錄下
到此這篇關(guān)于C++模擬Linux Shell編寫一個自定義命令的文章就介紹到這了,更多相關(guān)C++自定義命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C++標(biāo)準(zhǔn)庫中處理正則表達(dá)式的類std::regex
std?是?C++?標(biāo)準(zhǔn)庫的命名空間,包含了大量標(biāo)準(zhǔn)的?C++?類、函數(shù)和對象,這些類和函數(shù)提供了廣泛的功能,包括輸入輸出、容器、算法、字符串處理等,這篇文章主要介紹了C++標(biāo)準(zhǔn)庫中提供的用于處理正則表達(dá)式的類std::regex,需要的朋友可以參考下2024-03-03C語言之malloc動態(tài)分配內(nèi)存和free釋放
這篇文章主要介紹了C語言之malloc動態(tài)分配內(nèi)存和free釋放,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07VC創(chuàng)建進(jìn)程CreateProcess的方法
這篇文章主要介紹了VC創(chuàng)建進(jìn)程CreateProcess的方法,涉及VC操作進(jìn)程的基本技巧,需要的朋友可以參考下2015-05-05