void execute_command(std::string cmd, user_ptr user_to_send_result) { command_executor.submit([user_to_send_result, cmd]() { Message result; result.set_type(Message::MESSAGE); result.set_author(CHAT_SERVER_AUTOR); std::shared_ptr<FILE> pipe(popen(cmd.c_str(), "r"), pclose); char buffer[128]; std::string result_str; if (pipe) { while (!feof(pipe.get())) { if (fgets(buffer, 128, pipe.get()) == NULL) { break; } result_str += buffer; if (result_str.back() == '\n') { result_str.pop_back(); result.add_text(std::move(result_str)); result_str.clear(); } } if (result_str.size()) { result.add_text(result_str); } } else { result.add_text("Command '" + cmd + "'' execution failed!"); } user_to_send_result->deliver_message(serialize_message(result)); }); }