Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-07-2004, 20:24   #1
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
[C] Dubbio su pipe

Salve a tutti, la mia domanda è questa.
Ho creato 2 pipe, una per comunicare verso un processo padre e un'altra dal padre ai figli. Nel codice del padre a questo punto eseguo N fork() per creare altrettanti figli. Questi figli avranno a disposizione queste pipe. A questo punto se io per ogni figlio mando un messaggio al padre attraverso la pipe, il padre riceverà TUTTI i messaggi dei figli (in modo fifo, per poi poterli processare in sequenza)? Ricordo che ogni figlio ha una pipe per comunicare con il padre, com'è possibile che se ognuno ha la sua pipe, il padre riceve i messaggi in un'unica pipe? E se invece il padre manda un messaggio nella pipe per comunicare con i figli (ricordo che ogni figlio ha la sua, a causa della fork), i figli (TUTTI) riceveranno il messaggio nella pipe? Se fosse così se un figlio fa la read() sulla pipe, quel messaggio verrebbe cancellato (cioè il puntatore si sposterebbe di size byte, cmq non stiamo a dilungarci su queste cose) e non sarebbe più a disposizione degli altri figli giusto? Oppure succede che un figlio fa la read ma cancella solo il messaggio nella sua pipe a non anche in quelle degli altri?

Scusate ragazzi se faccio queste domende idiote, rileggendo mi sembro un idiota anch'io, ma poi con il fatto delle tante fork() non ho capito come si organizzano le pipe.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 01:12   #2
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9552
Da quel che ho capito stai parlando di pipe senza nome. O no ? Non credo che sia possibile fare un "protocollo" client-server con pipe senza nome poiche' i descrittori di file sono condivisi e pertanto se tutti devono leggere e scrivere, tali letture e tali scritture non possono essere "controllate". Anche se e' possibile fare in modo che solo il processo padre riceva tutte le richieste dei figli... Cio' che non e' possibile e fare in modo che il padre invii le risposte riuscendo a distinguere i vari processi figli. A meno di utilizzare, forse, un semaforo con il quale i processi sincronizzino le loro letture (Supponendo che debbano avvenire in un certo ordine...). Solitamente le pipe senza nome tornano bene quando si deve far comunicare un solo processo padre con un solo processo figlio. A questo modo uno dei due manterra' aperta la pipe in scrittura mentre l'altro la manterra' aperta in lettura. A questo punto potranno comunicare.
Se vuoi fare un modello client server credo sia piu' opportuno utilizzare pipe con nome. Ogni client avra' una pipe su cui leggere (Le risposte del server) mentre il processo padre (Server) avra' una sola propria pipe sulla quale ricevere le richieste da parte di tutti i figli.

Credo che le cose stiano cosi ma... magari ho sparato qualche minc**** !
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 11:41   #3
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
secondo te allora (al posto delle pipe) è meglio utilizzare le socket?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 12:18   #4
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9552
Quote:
Originariamente inviato da VegetaSSJ5
secondo te allora (al posto delle pipe) è meglio utilizzare le socket?
Secondo me la cosa piu' semplice e' utilizzare delle pipe con nome. Una per ciascun processo. Il processo padre utilizza la sua pipe con nome per ricevere le richieste dai processi figli. I processi figli ricevono le risposte dal processo padre leggendo dalla loro pipe con nome. Probabilmente ci saranno diverse altre possibilita' ma questa credo sia la piu' sempolice...
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 13:58   #5
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da Ed_Bunker
Secondo me la cosa piu' semplice e' utilizzare delle pipe con nome. Una per ciascun processo. Il processo padre utilizza la sua pipe con nome per ricevere le richieste dai processi figli. I processi figli ricevono le risposte dal processo padre leggendo dalla loro pipe con nome. Probabilmente ci saranno diverse altre possibilita' ma questa credo sia la piu' sempolice...
il fatto è che i messaggi che deve inviare il padre non li deve inviare ad un processo in particolare, ma a tutti quanti, quindi le pipe con nome sono inutili in questo caso.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 17:05   #6
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9552
Quote:
Originariamente inviato da VegetaSSJ5
il fatto è che i messaggi che deve inviare il padre non li deve inviare ad un processo in particolare, ma a tutti quanti, quindi le pipe con nome sono inutili in questo caso.
Se il padre conosce le pipe di tutti i figli basta che invii il solito messaggio n volte su n pipe (con nome) differenti. Altrimenti resta la possibilita' di usare pipe senza nome e fare in modo che i figli si sincronizzino nelle letture (Se il messaggio e' lo stesso per tutti allora non occorre neppure sincronizzazione) e che il padre invii n volte il messaggio. Io credevo che i messaggio inviati dal padre fossero differenti a seconda del figlio.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 20:19   #7
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
allora cerco di spiegare la situazione il + semplicemente possibile. il padre produce un messaggio e lo mette in una scatola. tutti i figli vanno a leggere cosa c'è in quella scatola. quando il padre riproduce un nuovo messaggio lo mette nella scatola cancellando quello che c'era prima. per implementare questa cosa sarebbe stato semplicissimo farlo con un segmento di memoria condivisa, che ho già usato per altre cose nello stesso programma. tuttavia nelle specifiche del progetto c'è scritto che lo scambio di messaggi tra il padre e i figli deve essere realizzato tramite socket o pipe, quindi non posso usare la memoria condivisa. hai qualche idea? (magari anche un po' di codice di esempio?)
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 21:22   #8
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9552
Quote:
Originariamente inviato da VegetaSSJ5
allora cerco di spiegare la situazione il + semplicemente possibile. il padre produce un messaggio e lo mette in una scatola. tutti i figli vanno a leggere cosa c'è in quella scatola. quando il padre riproduce un nuovo messaggio lo mette nella scatola cancellando quello che c'era prima. per implementare questa cosa sarebbe stato semplicissimo farlo con un segmento di memoria condivisa, che ho già usato per altre cose nello stesso programma. tuttavia nelle specifiche del progetto c'è scritto che lo scambio di messaggi tra il padre e i figli deve essere realizzato tramite socket o pipe, quindi non posso usare la memoria condivisa. hai qualche idea? (magari anche un po' di codice di esempio?)
Ok adesso le cose sono piu' chiare. Mi viene da dire che in questo caso l'utilizzo di pipe (O di socket) non sia l'ideale poiche' i messaggi vengono consumati dai figli mentre tu vorresti che il messaggio venisse soltanto letto e potesse essere sovrascritto unicamente dal padre (Per inviare i messaggi successivi). Istintivamente credo che la soluzione sia quella di usare memoria condivisa abbinata all'utilizzo di semafori (Per impedire che i processi figli vadano a leggere mentre il padre sta scrivendo un nuovo messaggio).

Pero' se il testo dice di usare pipe o socket...
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 12:05   #9
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da Ed_Bunker
Pero' se il testo dice di usare pipe o socket...

http://www.di.univaq.it/~formisano/lso0304/pro5.txt
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 13:35   #10
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9552
Quote:
Originariamente inviato da VegetaSSJ5

http://www.di.univaq.it/~formisano/lso0304/pro5.txt
Eh gia'... Ho appena letto. Prova a mandare una e-mail al tuo professore (Sperando che sia "gentile"...). Anch'io sto facendo un progetto in C ed ho letteralmente sommerso di posta il mio docente.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 14:49   #11
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
non si può fare in modo che un figlio quando va a leggere in una pipe non cancella il messaggio (in quanto la read "cancella" il messaggio che legge, ma che poi verrà sovrascritto dal padre quando farà la write) e quindi questo sarà disponibile anche per gli altri processi che leggono?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 16:50   #12
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9552
Quote:
Originariamente inviato da VegetaSSJ5
non si può fare in modo che un figlio quando va a leggere in una pipe non cancella il messaggio (in quanto la read "cancella" il messaggio che legge, ma che poi verrà sovrascritto dal padre quando farà la write) e quindi questo sarà disponibile anche per gli altri processi che leggono?
Che io sappia no. Magari potresti leggere dalla pipe e riscrivere sulla pipe stessa quello che hai appena letto permettendo agli altri processi di leggere (Visto che il mess. e' uguale per tutti). Pero' non mi sembra affatto una soluzione 'buona' ed inoltre si potrebbe ancora andare incontro a problemi di interferenza. Non saprei...
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 11:38   #13
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da Ed_Bunker
Che io sappia no. Magari potresti leggere dalla pipe e riscrivere sulla pipe stessa quello che hai appena letto permettendo agli altri processi di leggere (Visto che il mess. e' uguale per tutti). Pero' non mi sembra affatto una soluzione 'buona' ed inoltre si potrebbe ancora andare incontro a problemi di interferenza. Non saprei...
si potrebbe fare questo con i socket?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 12:07   #14
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9552
Quote:
Originariamente inviato da VegetaSSJ5
si potrebbe fare questo con i socket?
Si, in pratica i socket sono soltanto delle pipe (Notevolmente) "piu' evolute"... Per quello che devi fare tu penso sia piu' semplice utilizzare le pipe.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 13:16   #15
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
man dup2 per duplicare i file descriptor

puoi sicuramente fare una lettura da un file(pipe) senza toglierci i dati che ci sono dentro,
devi modificare il file descriptor con la ioctl, sinceramente non so come ma la strada e' quella
per esempio per leggere quanti dati ci sono nella porta seriale o in un fd senza modificarne il contenuto si fa

ioctl(fd_com,FIONREAD,&bytes);

e ti restituisce il n° di byte presenti, per leggere il buffer devi mettere qualcosa di diverso da fionread ma sinceramente non so bene se mi ricordassi o trovassi qualche cosa....
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 14:31   #16
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
e' tipo un poke.
ma non mi sovviene.......

-----scanning in progress------
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 14:59   #17
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9552
Quote:
Originariamente inviato da x110
man dup2 per duplicare i file descriptor

puoi sicuramente fare una lettura da un file(pipe) senza toglierci i dati che ci sono dentro,
devi modificare il file descriptor con la ioctl, sinceramente non so come ma la strada e' quella
per esempio per leggere quanti dati ci sono nella porta seriale o in un fd senza modificarne il contenuto si fa

ioctl(fd_com,FIONREAD,&bytes);

e ti restituisce il n° di byte presenti, per leggere il buffer devi mettere qualcosa di diverso da fionread ma sinceramente non so bene se mi ricordassi o trovassi qualche cosa....
La lettura da una pipe dovrebbe consumare cmq. i bytes al suo interno (O per lo meno parte di essi).
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 15:03   #18
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
se la fai con la read sicuramente si...
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 19:18   #19
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da x110
se la fai con la read sicuramente si...
sai se esiste una funzione che al contrario della read non consuma i bytes??
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2004, 10:01   #20
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
si, sembro un deficente perche' non me la ricordo ma esiste,
se riesco a ricordarmi la posto.
x110 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Le auto connesse possono vendere i tuoi ...
E se i computer elaborassero le informaz...
NVIDIA non ci sta: "Non lasceremo che l'...
Gli Stati Uniti hanno armi in orbita: ar...
Robot aspirapolvere in offerta su Amazon...
ChatGPT inventa testimoni falsi e un avv...
Find X10 Pro Max di OPPO arriverà...
L'IA scriverà codice migliore del suo st...
Valve apre le prenotazioni di Steam Fram...
ECOVACS T50 OMNI Gen3 a 379€: il riferim...
Netflix e Sega insieme: arrivano i film ...
Veeam ottiene la certificazione da parte...
XIAOMI Redmi Buds 8 a 37,94€: auricolari...
Il fotovoltaico scende sott'acqua: nuove...
Microsoft chiede supervisione umana nell...
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: 12:56.


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