programmazione:cpp:appunti_cpp
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Prossima revisione | Revisione precedente | ||
| programmazione:cpp:appunti_cpp [10/09/2026 13:24] – creata Fabio Di Matteo | programmazione: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: | ||
| + | |||
| 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: | ||
| + | |||
| + | |||
| + | ===== Try/catch ===== | ||
| + | <code c++> | ||
| + | try { | ||
| + | ...le mie istruzioni... | ||
| + | } | ||
| + | catch (const std:: | ||
| + | // Intercetta std:: | ||
| + | std::cerr << " | ||
| + | } | ||
| + | catch (...) { | ||
| + | // Il " | ||
| + | std::cerr << " | ||
| + | } | ||
| + | </ | ||
| Linea 13: | Linea 34: | ||
| </ | </ | ||
| + | ===== Determinare se una porta tcp è aperta o no ===== | ||
| + | La funzione ritorna true se è aperta false altrimenti. | ||
| + | |||
| + | <code c++> | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | |||
| + | bool is_port_ready(const char* host, int port) { | ||
| + | int socket_fd = socket(AF_INET, | ||
| + | if (socket_fd < 0) | ||
| + | return false; | ||
| + | |||
| + | sockaddr_in address{}; | ||
| + | address.sin_family = AF_INET; | ||
| + | address.sin_port = htons(port); | ||
| + | |||
| + | if (inet_pton(AF_INET, | ||
| + | close(socket_fd); | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | bool is_ready = connect( | ||
| + | socket_fd, | ||
| + | reinterpret_cast< | ||
| + | sizeof(address) | ||
| + | ) == 0; | ||
| + | |||
| + | close(socket_fd); | ||
| + | return is_ready; | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Si potrebbe usare così: | ||
| + | |||
| + | <code c++> | ||
| + | ... | ||
| + | |||
| + | std::thread server([& | ||
| + | mioservertcp.run(); | ||
| + | }); | ||
| + | |||
| + | // Attende che abbia aperto la porta | ||
| + | while (!is_port_ready(" | ||
| + | std:: | ||
| + | } | ||
| + | |||
| + | // A questo punto il server è raggiungibile | ||
| + | std:: | ||
| + | |||
| + | server.join(); | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | 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' | ||
programmazione/cpp/appunti_cpp.1789039490.txt.gz · Ultima modifica: 10/09/2026 13:24 da Fabio Di Matteo
