Pequeno Shell Unix em C++
Publicado por Fernando (última atualização em 02/03/2018)
[ Hits: 3.562 ]
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.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (6)