read (2) e write (2) funziona sia sul descrittore di socket che sul descrittore di file. Nel caso del descrittore di file, tabella descrittore file utente-> tabella file e infine tabella inode dove viene controllato il tipo di file (file normale/char/blocco) e viene letto di conseguenza. In caso di file char spl, ottiene i puntatori di funzione in base al numero maggiore del file dall'interruttore del dispositivo char e chiama le appropriate routine di lettura/scrittura registrate per il dispositivo. La routine di lettura/scrittura è appropriata per il file speciale di blocco ottenendo i puntatori di funzione dall'interruttore del dispositivo a blocchi.descrittore di socket vs descrittore di file
Per favore fatemi sapere cosa succede esattamente quando leggere/scrivere chiamato sul descrittore di socket. Se lavori di lettura/scrittura sul descrittore di socket, non possiamo usare open invece di socket per ottenere il descrittore?
non posso dirvi esattamente ** ** ciò che accade (provare a guardare i sorgenti del kernel se si vuole veramente sapere), ma essenzialmente passerà la richiesta al driver TCP, che la inoltrerà più in basso nello stack di rete fino a raggiungere il driver per la scheda di interfaccia di rete. Se vuoi sapere che cosa fa ogni livello dello stack di rete in termini generali, cerca il * modello OSI *. Per quanto riguarda 'open' vs' socket': prendono argomenti diversi, poiché le informazioni che devono essere specificate sono diverse a seconda che si desideri aprire un file o un socket. – David
Desidero sapere quali sono le strutture dati allocate sul socket chiamante(), quali informazioni sono memorizzate nella tabella inode, come raggiungono le routine dei driver della scheda di interfaccia di rete quando si chiama read/write –
Note read/write wrap the system call. La maggior parte del lavoro è fatta nello spazio del kernel. è una sorta di astrazione, o "virtualizzazione": prendi semplicemente il file di blocco, il socket o molte altre cose, come "file". un file ha operazioni come read, write, open, ecc. Ma la vera implementazione di leggere un socket o leggere un file su disco è definita nel kernel. È anche possibile definire la "scrittura" per leggere dal file, se necessario. – tristan