Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-06-2006, 19:31   #1
mercury841
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 409
[c]=progetto socket

Ragazzi devo fare questo progetto:

Shell Remota
Si realizzi un programma client/server che, tramite socket del dominio AF INET, permetta di eseguire i
comandi unix sotto riportati dalla macchina server a partire dalla macchina su cui é in esecuzione il
client.

I comandi da implementare sono almeno i seguenti:
-cp <path> <path> - Copia un file (regolare) da <path> a <path>
-ls <path> - Lista il contenuto della directory <path>
-rm <path> - Cancella il file individuato da <path>
-mkdir <path> - Crea la directory individuata da <path>

i comandi devono essere lanciati dalla macchina client insieme con i relativi argomenti, devono essere
eseguiti sulla macchina server e riportare il risultato dell’esecuzione sulla macchina client.

Secondo voi sono presenti delle sezioni critiche da gestire?
Ciao e grazie a chi mi aiuta.
mercury841 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 07:49   #2
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
secondo me si potrebbe fare utilizzando la exec sul server e poi (nn so se possibile ma credo di si) reindirizzando lo stdout del comando eseguito direttanente sul socket
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 08:29   #3
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da mercury841
Ragazzi devo fare questo progetto:

Shell Remota
Si realizzi un programma client/server che, tramite socket del dominio AF INET, permetta di eseguire i
comandi unix sotto riportati dalla macchina server a partire dalla macchna su cui é in esecuzione il
client.

I comandi da implementare sono almeno i seguenti:
?-cp <path> <path> - Copia un file (regolare) da <path> a <path>
?-ls <path> - Lista il contenuto della directory <path>
?-rm <path> - Cancella il file individuato da <path>
-mkdir <path> - Crea la directory individuata da <path>

i comandi devono essere lanciati dalla macchina client insieme con i relativi argomenti, devono essere
eseguiti sulla macchina server e riportare il risultato dell'esecuzione sulla macchina client.

Secondo voi sono presenti delle sezioni critiche da gestire?
Ciao e grazie a chi mi aiuta.
fare un client/server non é una cazzata
conosci la fork(), execvp(), etc() etc() etc() ?

devi creare un socket con socket(AF_INET, SOCK_STREAM, 0)
settare le opzioni con setsockopt(...) chiamare la bind(...)
la listen(...) se tutto é OK il server si deve clonare con la fork()
poi eventualmente modificare i parametri e passarli alla execvp(...).
E dopo viene il difficile

in bocca al lupo
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 09:11   #4
mercury841
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 409
Di quello che avete detto già ho fatto tutto, a me interessava sapere solo se, secondo voi, facendo un sistema multiclient c'era bisogno di gestire qualche sezione critica.
mercury841 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 09:57   #5
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da mercury841
Di quello che avete detto già ho fatto tutto, a me interessava sapere solo se, secondo voi, facendo un sistema multiclient c'era bisogno di gestire qualche sezione critica.
ah scusa allora. Qui spesso capita che si chieda tutto il programma bello e pronto
cosa intendi per sezione critica ?
hai messo la gestione segnali ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 10:14   #6
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Quote:
Originariamente inviato da mercury841
Di quello che avete detto già ho fatto tutto, a me interessava sapere solo se, secondo voi, facendo un sistema multiclient c'era bisogno di gestire qualche sezione critica.
Ora mi viene solo in mente di controllare il segnale che sblocca la accept
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 10:30   #7
mercury841
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 409
Quote:
Originariamente inviato da trallallero
cosa intendi per sezione critica ?
allora per sezione critica intendo una parte di codice nel quale un processo o un thread può modificare variabili comuni,scrivere in un file e così via.Quando un processo o un thread è in esecuzione nella propria sezione critica, non si deve consentire a nessun altro processo o thread di essere in esecuzione nella propria sezione critica. Nel mio caso ci potrebbero essere due client che cercano di eseguire due operazioni diverse sullo stesso file contemporaneamente, per esempio un client manda il comando "rm file1" e un altro client manda il comando "cp file1 copia_file1". Secondo voi devo gestire questa situazione cioè evitare che queste due operazioni vengano eseguite contemporaneamente oppure lascio le cose così come stanno?


Quote:
Originariamente inviato da trallallero
hai messo la gestione segnali ?
Segnali per cosa?Che tipo di segnali?
mercury841 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 10:43   #8
mercury841
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 409
Quote:
Originariamente inviato da Andlea
Ora mi viene solo in mente di controllare il segnale che sblocca la accept
come controllare il segnale che sblocca la accept?
cma grazie a tutti per l'aiuto.
mercury841 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 10:50   #9
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Codice:
for(;;){
if((socket = accept(....)) < 0){
if(errno == EINTR) continue;
else {
perror("errore nella accept");
exit(1);
}
}
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 11:01   #10
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da mercury841
Segnali per cosa?Che tipo di segnali?

Segnali quali sigquit, sigint ...
se tu prendi il pid del server e ci fai un bel kill -9 <pid>
nel server potresti intercettarlo ed agire di conseguenza.
Se viene ucciso il server prima dealloco la memoria,
chiudo i sockets, stampo "ciao" a video etc etc
poi esco, per esempio.

Codice:
/* ------------------------------------ *\
      PREPARA INTERCETTAZIONE SEGNALI.
\* ------------------------------------ */
static void SigInit(void)
{
   enum sigTab  // ENUMERAZIONE ARRAY DI STRUTTURE PER 'sigaction'.
   {
       sigCHLD
     , sigQUIT
     , sigINT
     , sigPIPE
     , OFFsignal
   };

   static struct sigaction s[OFFsignal];

   s[sigQUIT].sa_sigaction = QuitFunction;
   sigemptyset(&s[sigQUIT].sa_mask);
   s[sigQUIT].sa_flags = NULL;
   if (sigaction(SIGQUIT, &s[sigQUIT], 0))
      ExitMsg(__LINE__ ,1 ,"sigaction:SIGQUIT");

   s[sigINT].sa_sigaction = QuitFunction;
   sigemptyset(&s[sigINT].sa_mask);
   s[sigINT].sa_flags = NULL;
   if (sigaction(SIGINT, &s[sigINT], 0))
      ExitMsg(__LINE__ ,1 ,"sigaction:SIGINT");

   s[sigPIPE].sa_sigaction = PipeHandler;
   sigemptyset(&s[sigPIPE].sa_mask);
   s[sigPIPE].sa_flags = NULL;
   if (sigaction(SIGPIPE, &s[sigPIPE], 0))
      ExitMsg(__LINE__ ,1 ,"sigaction:SIGPIPE");
}
questo é la gestione dei segnali di un server che ho fatto anni fa.
Gestisco i segnali quit, interrupt e pipe.
Quando arriva un segnale del genere viene chiamata la funzione
che gli dico io (QuitFunction o PipeHandler) che deve essere
fatta in un certo modo ... .sa_sigaction é un pointer a funzione
di un certo tipo:
Codice:
void (*p)( int, siginfo_t *, void *)
Per la sezione critica non ti saprei dire. Non ho esperienza
a riguardo. Ma é interessante ... ci penso un pó
Ma calcola che non ho esperienza teorica che comunque serve,
sicuramente chi ha studiato all'universitá ti puó aiutare
con info piú precise
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 17:38   #11
mercury841
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 409
è sorto un problema, io per far esguire i comandi al server faccio una dup2 per ridirezionare l'output nella socket, e poi una execvp con il vettore dei comandi. Funziona per tutti i comandi tranne per uno, se voglio far eseguire il comando "rm -i nome_file", per prima cosa non mi scrive nella socket "rm: remove regular file `nome_file'?", ma poi nel caso volessi inviare dal client la risposta y come dovrei fare????????
mercury841 è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2006, 09:20   #12
mercury841
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 409
io per far esguire i comandi al server faccio una dup2 per ridirezionare l'output nella socket, e poi una execvp con il comando da eseguire. Funziona però, volevo chiedervi se secondo voi è meglio usare una popen reindirizzando l'output su un file e poi copiare il contenuto di questo file nella socket.Ciao
mercury841 è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2006, 10:44   #13
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da mercury841
io per far esguire i comandi al server faccio una dup2 per ridirezionare l'output nella socket, e poi una execvp con il comando da eseguire. Funziona però, volevo chiedervi se secondo voi è meglio usare una popen reindirizzando l'output su un file e poi copiare il contenuto di questo file nella socket.Ciao
Ciao,
direi che la dup() (o la dup2()) sono la soluzione migliore. In effetti ti dovrebbero risolvere anche il problema dell'output di rm -i.
Per quanto riguarda le sezioni critiche, il mio consiglio e' quello di non fare assolutamente niente.
I vantaggi sono la semplicita' di realizzazione (non devi far niente) ed il fatto che e' giusto cosi': nel caso un client impartisca il comando di rm su un file che e' in fase di copia, il sistema reagira' come se i comandi fossero impartiti da due console locali.

Per quanto riguarda la gestione dei segnali: hai il problema che se un client se ne va in modo non corretto (per esempio, va in crash), TCP/IP potrebbe non avvertirti. Non e' detto, infatti, che tu possa ricevere una notifica di una simile situazione.

Purtroppo questa situazione, se non la gestisci, ti porterebbe ad avere un processo/thread oppure un semplice descrittore sempre allocato per una risorsa che non esiste piu'.

In questo senso, gestire i segnali di kill potrebbe aiutarti ma non ti risolve il problema. Forse la cosa migliore (a patto di complicare il codice) e' di avere un messaggio di watchdog ("sei vivo?") che viaggia in entrambe le direzioni. Se non lo ricevi in tempo utile, chiudi tutto.

Buon lavoro
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2006, 11:25   #14
mercury841
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 409
e in che modo posso realizzare la funzione del watchdog? mandando un messaggio al client e vedendo se mi risponde?
mercury841 è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2006, 14:32   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da mercury841
e in che modo posso realizzare la funzione del watchdog? mandando un messaggio al client e vedendo se mi risponde?
Beh, si.
Questa e' la soluzione che viene usata piu' frequentemente. Certo, se devi fare solo un esame, non complicarti troppo la vita. Chiudi solo in caso ti venga notificato un errore (per esempio, una chiamata quale read(), write(), accept() e via dicendo fallisce).

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Engwe O20 Boost: abbiamo provato in ante...
UWANT V800: addio al rullo rotante, l’as...
Keenetic Stellar 6 porta il WiFi 6 negli...
Instagram spinge sul formato orizzontale...
DMA, l'UE verso la designazione di AWS e...
Dalla fisica quantistica alla fibra: il ...
TikTok, il 59% dei video è AI Slop, 'sch...
Batterie stampate in 3D: la forma libera...
Honor X80 Pro Max ufficiale: vi bastano ...
HONOR Watch 6: batteria infinita, modali...
Windows 11, addio alle ricerche sul web:...
La vera sfida dell’IA non è adott...
Signal contro l'AI agentica: dare ai cha...
Amazon: l'human-in-the-loop non basta a ...
HONOR 600 Lite: design in metallo e batt...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v