• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Programmazione su Linux (Ubuntu)

gedamial

Utente Senior
Autore del topic
9 Giugno 2010
1.937
69
Miglior risposta
0
Salve.

Ho appena scaricato l'ISO di Ubuntu 14.04 e appena avrò il DVD dovrò masterizzarlo per poi fare la partizione al mio Hard Disk. Ho scelto di passare ad Ubuntu (non completamente, dato che è una partizione insieme a Windows 8.1) per due motivi:

1. Avvicinarmi al mondo Linux, di cui ignoravo completamente l'esistenza
2. Avvicinarmi al mondo dei Socket (su Windows i Socket? Non ne parliamo va...)

Mi piacerebbe sapere, in ambito di programmazione, quali sono i vantaggi e le differenze rispetto a chi programma su Windows.

Grazie tante!
 
Le differenze sono, a primo impatto, a livello di sintassi.
Poi cambiano tante cose, come la gestione dei processi e della memoria. Sui sistemi Unix per esempio esiste la chiamata fork() che ti permette di creare un processo figlio di quello che è attualmente in esecuzione, in maniera molto più "facile" che su Windows.

Per quanto riguarda i socket mi fanno un po' ridere i tuoi commenti del tipo "Non ne parliamo va..", perché è tutta una questione di abitudine. Sono due OS diversi che ti offrono delle API diverse, per questo la sintassi dei socket su Windows può apparire più difficile, ma alla fine funziona lo stesso, è questione di studio.
 
Le differenze sono, a primo impatto, a livello di sintassi.
Poi cambiano tante cose, come la gestione dei processi e della memoria. Sui sistemi Unix per esempio esiste la chiamata fork() che ti permette di creare un processo figlio di quello che è attualmente in esecuzione, in maniera molto più "facile" che su Windows.

Per quanto riguarda i socket mi fanno un po' ridere i tuoi commenti del tipo "Non ne parliamo va..", perché è tutta una questione di abitudine. Sono due OS diversi che ti offrono delle API diverse, per questo la sintassi dei socket su Windows può apparire più difficile, ma alla fine funziona lo stesso, è questione di studio.

Grazie per la risposta!

Se creo un software con i Socket su Ubuntu, esso gira su windows?
 
Grazie per la risposta!

Se creo un software con i Socket su Ubuntu, esso gira su windows?

No, mi sembra ovvio che non è possibile. Il C non prescinde dalla macchina su cui gira, ogni OS ha delle librerie diverse che vengono collegate al tuo codice durante la fase di linking. E poi fork() e socket() (per esempio) sono chiamate DI SISTEMA, quindi non possono girare su altri sistemi...
 
No, mi sembra ovvio che non è possibile. Il C non prescinde dalla macchina su cui gira, ogni OS ha delle librerie diverse che vengono collegate al tuo codice durante la fase di linking. E poi fork() e socket() (per esempio) sono chiamate DI SISTEMA, quindi non possono girare su altri sistemi...

Ma a livello di "comunicazione", se creo un client su Windows e un server su Ubuntu, essi possono comunicare!
 
Tanti siti web girano su server Linux, ma tu con Windows e un qualsiasi browser puoi navigare tranquillamente su tutte le pagine.
Qui entriamo nel mondo delle reti informatiche, e bisognerebbe introdurre il sistema ISO/OSI per rispondere precisamente a questa domanda.

Il concetto di base è comunque l'astrazione: un client e un server "parlano" tramite un sistema di "messaggi" (settimo livello della pila OSI) che astraggono dall'hardware. Cioè, se io ti chiedo "Dammi una lista di utenti iscritti nel 2008 a Sciax2" a me non interessa come fai a cercare questi utenti, ma di sicuro so che tu mi risponderai con "Gli utenti registrati nel 2008 sono X, Y e Z" (protocollo).
Quindi alla fine basta mettersi d'accordo su come ci si parla, il resto è affidato a qualcun altro, in questo caso agli altri livelli della pila di cui sopra.

Non è immediato capire il concetto se non conosci queste basi, però in fondo non è difficile. :emoji_slight_smile:
 
Tanti siti web girano su server Linux, ma tu con Windows e un qualsiasi browser puoi navigare tranquillamente su tutte le pagine.
Qui entriamo nel mondo delle reti informatiche, e bisognerebbe introdurre il sistema ISO/OSI per rispondere precisamente a questa domanda.

Il concetto di base è comunque l'astrazione: un client e un server "parlano" tramite un sistema di "messaggi" (settimo livello della pila OSI) che astraggono dall'hardware. Cioè, se io ti chiedo "Dammi una lista di utenti iscritti nel 2008 a Sciax2" a me non interessa come fai a cercare questi utenti, ma di sicuro so che tu mi risponderai con "Gli utenti registrati nel 2008 sono X, Y e Z" (protocollo).
Quindi alla fine basta mettersi d'accordo su come ci si parla, il resto è affidato a qualcun altro, in questo caso agli altri livelli della pila di cui sopra.

Non è immediato capire il concetto se non conosci queste basi, però in fondo non è difficile. :emoji_slight_smile:

Nono, le reti informatiche sono una mia attuale occupazione. Le sto studiando con impegno. Era solo uno stupido dubbio.

Va bene, grazie mille! Problema risolto!
 
@HabboFanNumero1 Il "non capire" i Socket su Windows proviene da molti motivi che adesso ti scriverò :

- impostazione mentale non ottimale per quell'argomento ( la escludo, a meno che tu non sia un perfetto cretino )
- difficoltà di comprensione proveniente da un'impostazione mentale non adeguata per quell'argomento, che ho escluso poc'anzi, oppure proveniente da una non corretta documentazione ( molto probabile )
- superficialità
- scarsa conoscenza del C

Tutte queste ragione, probabilmente ce ne sono delle altre chissà, non solo non ti permettono di comprendere i Socket ma in generale non ti permettono di comprendere niente. I socket funzionano in un determinato modo, leggi come funzionano e ti farai un'idea. Programmare i socket funziona esattamente come funzionano i socket stessi : imposto i parametri di connessione ( indirizzo, porta, protocollo, tipo di socket ), inizializzo queste variabili ( o in modo definito dal programmatore oppure lo faccio scegliere all'utente ), invio la richiesta di connessione al server, abilito il socket per ricevere dati dal server, se sono connesso invio i dati e li faccio elaborare. Quando il client non deve fare nient'altro lo disconnetto. Ad ogni passaggio descritto corrisponde una funzione e ad ogni funzione corrispondono determinati argomenti da passare ad essere e bisogna saperci fare anche perché in C non esistono le stringhe ma gli array di caratteri perciò bisogna conoscere bene tutte le operazioni riguardanti gli array se voglio inviare una stringa o farla "elaborare". Insomma mettiti una mano sulla coscienza e risponditi da solo al perché non capisci i socket su Windows.

PS: così come su Windows, il ragionamento che seguono vale anche per Linux funzionano allo stesso modo su Linux.
 
@HabboFanNumero1 Il "non capire" i Socket su Windows proviene da molti motivi che adesso ti scriverò :

- impostazione mentale non ottimale per quell'argomento ( la escludo, a meno che tu non sia un perfetto cretino )
- difficoltà di comprensione proveniente da un'impostazione mentale non adeguata per quell'argomento, che ho escluso poc'anzi, oppure proveniente da una non corretta documentazione ( molto probabile )
- superficialità
- scarsa conoscenza del C

Tutte queste ragione, probabilmente ce ne sono delle altre chissà, non solo non ti permettono di comprendere i Socket ma in generale non ti permettono di comprendere niente. I socket funzionano in un determinato modo, leggi come funzionano e ti farai un'idea. Programmare i socket funziona esattamente come funzionano i socket stessi : imposto i parametri di connessione ( indirizzo, porta, protocollo, tipo di socket ), inizializzo queste variabili ( o in modo definito dal programmatore oppure lo faccio scegliere all'utente ), invio la richiesta di connessione al server, abilito il socket per ricevere dati dal server, se sono connesso invio i dati e li faccio elaborare. Quando il client non deve fare nient'altro lo disconnetto. Ad ogni passaggio descritto corrisponde una funzione e ad ogni funzione corrispondono determinati argomenti da passare ad essere e bisogna saperci fare anche perché in C non esistono le stringhe ma gli array di caratteri perciò bisogna conoscere bene tutte le operazioni riguardanti gli array se voglio inviare una stringa o farla "elaborare". Insomma mettiti una mano sulla coscienza e risponditi da solo al perché non capisci i socket su Windows.

PS: così come su Windows, il ragionamento che seguono vale anche per Linux funzionano allo stesso modo su Linux.

Il problema NON è che non ho capito cosa sono i socket. Ho studiato i socket, quello che fanno ecc. Il problema effettivo è...

@HabboFanNumero1 Il "non capire" i Socket su Windows proviene da molti motivi che adesso ti scriverò :

- impostazione mentale non ottimale per quell'argomento ( la escludo, a meno che tu non sia un perfetto cretino )
- difficoltà di comprensione proveniente da un'impostazione mentale non adeguata per quell'argomento, che ho escluso poc'anzi, oppure proveniente da una non corretta documentazione ( molto probabile )
- superficialità
- scarsa conoscenza del C

Che ne dici di aggiungere

-Scarsa quantità di fonti di documentazione in italiano su come creare socket su Windows (libri e siti)

In italiano ci sono molte guide su come inizializzarli su Linux.
Più un la penserò a farlo su Windows.

Un'altra cosa che già ti dissi:

- scarsa conoscenza del C

Non sono per niente d'accordo. Alt, vedo già i tuoi occhi riempendosi di fuoco :emoji_relieved:. Dico la mia

Per me non è vero. Perché se si parla di Socket, oltre a conoscere il C naturalmente, bisogna conoscere i prototipi delle funzioni. Se io non conosco i parametri della funzione bind() o della funzione listen() è perché non conosco i prototipi di quelle funzioni definite nell'header Winsock2.h e non perché non conosco il C!
 
Ma per esempio prima di ricevere un messaggio, siccome userai una variabile buffer, dovrai azzerarlo, e per farlo bisogna conoscere sia la funzione farlo, sia cosa si intende per azzerarlo. :emoji_relieved:
 
-Scarsa quantità di fonti di documentazione in italiano su come creare socket su Windows (libri e siti)

Ti ho detto un sacco di volte di documentarti sui siti inglesi ma da un orecchio ti entra e dall'altro ti esce.

Per me non è vero. Perché se si parla di Socket, oltre a conoscere il C naturalmente, bisogna conoscere i prototipi delle funzioni. Se io non conosco i parametri della funzione bind() o della funzione listen() è perché non conosco i prototipi di quelle funzioni definite nell'header Winsock2.h e non perché non conosco il C!

Conoscere bene il C implica conoscere bene tutti ciò che esso riguarda, a partire dalle variabili fino alle liste; cosa molto importante : le funzioni, per non parlare dei parametri di una funzione, bisogna saperli "interpretare"...questa è tutta la difficoltà di gestire i socket.
 
Ultima modifica:
Ti ho detto un sacco di volte di documentarti sui siti inglesi ma da un orecchio ti entra e dall'altro ti esce.



Conoscere bene il C implica una conoscenza abbastanza decente di tutto ciò che riguarda le funzioni e, cosa molto importante, i puntatori; per non parlare dei parametri che bisogna sapere quali tipi di variabili accetta una funzione...questa è tutta la difficoltà di gestire i socket.

Infatti io mi riferivo proprio a QUELLA difficoltà :soso:
 
Infatti io mi riferivo proprio a QUELLA difficoltà :soso:

Basta che cerchi le varie funzioni su internet troverai tutto quello che ti serve...insomma sei capriccioso, mica hai messo mano a chissà cosa...alla fine sono una stupidaggine ma non ti applichi, alla minima cosa ti scoraggi. Vedi tu.
 
Basta che cerchi le varie funzioni su internet troverai tutto quello che ti serve...insomma sei capriccioso, mica hai messo mano a chissà cosa...alla fine sono una stupidaggine ma non ti applichi, alla minima cosa ti scoraggi. Vedi tu.

Nono vedi che io non mi sono scoraggiato, sono riuscito a creare il server alla fine :soso:

Quello che mi manca è il Port Forwarding che con Fastweb è un macello...