Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x scommette tutto, forse troppo, sulla batteria da 7500 mAh e sulla certificazione ArmorShell per farsi notare nella fascia più economica del mercato: lo abbiamo messo alla prova per capire a chi è rivolto questo smartphone che sacrifica un po' prestazioni, display e fotocamera per offrire l'autonomia migliore possibile a un prezzo decisamente contenuto
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


iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
ECOVACS T90S PRO OMNI Care Kit a 699€: 4...
iPhone Duo, i problemi di produzione con...
Lenovo e FIFA, il bilancio dei Mondiali ...
La Terra vista dalla Stazione Spaziale: ...
L'IA cinese ti spiega come produrre armi...
Nuova Fire TV Stick 4K e Telecomando Fir...
Addio Visa e Mastercard? L'Europa prepar...
Allarme IA in Florida: lo stato invoca i...
Tutte le Offerte Prime anticipate: robot...
Procura di Sassari e Oxygen Forensics: i...
Duo-Man trasforma iPhone Duo in un Walkm...
Questa carta da parati produce elettrici...
Perseverance scopre su Marte rocce mai o...
Batterie allo stato solido, Gotion alza ...
Caviar presenta la Black Edition di iPho...
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: 04:45.


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