Pequeno Shell Unix em C++
Publicado por Fernando (última atualização em 02/03/2018)
[ Hits: 3.724 ]
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; }
Full linux c++ implementation of conio.h (conio.h para linux)
Nenhum coment�rio foi encontrado.
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Dica para encontrar diversos jogos Indies criativos
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Software livre - será que eu estou tão errado assim? (16)
A escola é altamente ineficiente e ineficaz! (12)