Strumenti Utente

Strumenti Sito


programmazione:cpp:appunti_cpp

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
programmazione:cpp:appunti_cpp [10/09/2026 13:24] – creata Fabio Di Matteoprogrammazione:cpp:appunti_cpp [15/09/2026 18:52] (versione attuale) – Fabio Di Matteo
Linea 1: Linea 1:
 ====== Alcuni veloci appunti su C++ ====== ====== Alcuni veloci appunti su C++ ======
 +Autore: **//Fabio Di Matteo//** \\ Ultima revisione:  **//  10/09/2026 13:45   //**  // //
 +
 Ho fatto alcune pagine simili su Rust e Go, quindi perchè non farle anche su C++. Si preferirà uno standard moderno. Ho fatto alcune pagine simili su Rust e Go, quindi perchè non farle anche su C++. Si preferirà uno standard moderno.
 +
 +===== Buone pratiche =====
 +Dato che il C/C++ offrono massima libertà nella gestine della memoria, possono (e non devono) essere pericolosi . Dunque ho raccolto alcune buone pratiche da tenere a mente qui:  [[programmazione:cpp:buone_pratiche|Buone pratiche di programmazione in C/C++]]
 +
 +
 +===== Try/catch =====
 +<code c++>
 +try {
 +       ...le mie istruzioni...
 +    } 
 +    catch (const std::exception& e) {
 +        // Intercetta std::exception e tutte le sue classi derivate
 +        std::cerr << "Errore intercettato: " << e.what() << std::endl;
 +    } 
 +    catch (...) {
 +        // Il "catch-all" intercetta qualsiasi cosa che non sia derivata da std::exception
 +        std::cerr << "Errore sconosciuto: è stata lanciata un'eccezione non standard." << std::endl;
 +    }
 +</code>
  
  
Linea 13: Linea 34:
 </code> </code>
  
 +===== Determinare se una porta tcp è aperta o no =====
 +La funzione ritorna true se è aperta false altrimenti.
 +
 +<code c++>
 +#include <arpa/inet.h>
 +#include <sys/socket.h>
 +#include <unistd.h>
 +
 +#include <cstdlib>
 +#include <chrono>
 +#include <thread>
 +
 +
 +bool is_port_ready(const char* host, int port) {
 +    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
 +    if (socket_fd < 0)
 +        return false;
 +
 +    sockaddr_in address{};
 +    address.sin_family = AF_INET;
 +    address.sin_port = htons(port);
 +
 +    if (inet_pton(AF_INET, host, &address.sin_addr) != 1) {
 +        close(socket_fd);
 +        return false;
 +    }
 +
 +    bool is_ready = connect(
 +        socket_fd,
 +        reinterpret_cast<sockaddr*>(&address),
 +        sizeof(address)
 +    ) == 0;
 +
 +    close(socket_fd);
 +    return is_ready;
 +}
 +
 +</code>
 +
 +
 +Si potrebbe usare così:
 +
 +<code c++>
 +...
 +
 +        std::thread server([&] {
 +            mioservertcp.run(); //server di esempio
 +        });
 +
 +        // Attende che abbia aperto la porta
 +        while (!is_port_ready("127.0.0.1", 8080)) {
 +            std::this_thread::sleep_for(std::chrono::milliseconds(10));
 +        }
 +
 +        // A questo punto il server è raggiungibile
 +        std::system("xdg-open http://127.0.0.1:8080/fmt");
 +
 +        server.join();
 +
 +
 +</code>
 +
 +Il mio server tcp viene eseguito su un thread esterno e il main attende 10 millisecondi finchè la porta non sia disponibile. Quando è disponibile in questo caso lancia un browser su quell'indirizzo. Infine aspettiamo che il thread termini.
programmazione/cpp/appunti_cpp.1789039490.txt.gz · Ultima modifica: 10/09/2026 13:24 da Fabio Di Matteo