Pequeno Shell Unix em C++
Publicado por Fernando (última atualização em 02/03/2018)
[ Hits: 3.697 ]
Homepage: https://github.com/phoemur/
Pequeno Shell Unix em C++.
Compilação:
$ g++ -o shell shell.cpp -O3 -Wall -Wpedantic -std=c++11
// g++ -o shell shell.cpp -O3 -Wall -Wpedantic -std=c++11 #include <iostream> #include <string> #include <sstream> #include <vector> #include <sys/wait.h> #include <unistd.h> using namespace std; vector<string> split_string(const string& input, const char delimiter) { stringstream ss {input}; vector<string> result; for (string buffer; getline(ss, buffer, delimiter);) {result.push_back(move(buffer));} return result; } int launch_execute(const vector<string>& command) { // handle builtins if (command.size() == 0) return 1; else if (command[0] == "exit") return 0; else if (command[0] == "cd") { if (command.size() == 1 || command.size() > 2) { cerr << "shell: expected 1 argument to \"cd\"\n"; } else { if (chdir(command[1].c_str()) != 0) { perror("shell"); } } return 1; } // cast vector<string> to const char** const char **argv = new const char* [command.size()+1]; for (unsigned j = 0; j < command.size(); ++j) { argv [j] = command[j].c_str(); } argv[command.size()] = NULL; // fork int status = 0; pid_t pid = fork(); if (pid == 0) { // Child process if (execvp(argv[0], (char **)argv) == -1) { perror("shell"); } delete[] argv; exit(EXIT_FAILURE); } else if (pid < 0) { // Error forking perror("shell"); } else { // Parent process do { waitpid(pid, &status, WUNTRACED); } while (!WIFEXITED(status) && !WIFSIGNALED(status)); } delete[] argv; return 1; } int main() { int status = 0; string line = ""; do { cout << "shell> "; getline(cin, line); vector<string> args = split_string(line, ' '); status = launch_execute(args); } while (status); return 0; }
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Ajuda Pra Melhoria do NFTABLES. (7)
Zorin OS - Virtual Box não consigo abrir maquinas virtuais (4)
como instalar o steam no twiteros 2.0.2(arm) (5)