Pequeno Shell Unix em C++
Publicado por Fernando (última atualização em 02/03/2018)
[ Hits: 3.786 ]
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; }
Painel de configuração placas ati
Faixa salarial de funcionários
Boletim Escolar Com Manipulação de Arquivo
Nenhum comentário foi encontrado.
Desktop Linux ganha novos apps enquanto IA invade o noticiário
Blender 5.0 Beta, Firefox 144 e avanço da IA dominam o dia no mundo Linux
Desktop Linux ganha fôlego enquanto distros refinam experiência e segurança
Wayland em alta, IA em debate e novos ventos para distros e devices
Qt 6.10 e Python 3.14 puxam o ritmo do software livre nesta quarta
Como mudar o nome de dispositivos Bluetooth via linha de comando
Adicionando o repositório backports no Debian 13 Trixie
Linux x Plataformas de Trading - um problema (in-)solúvel? (1)
Ubuntu 25.10 - Erro ao iniciar o Omnissa Horizon (1)