Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-07-2004, 21: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, 02:12   #2
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
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, 12: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, 13:18   #4
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
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, 14: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, 18:05   #6
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
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, 21: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, 22:22   #8
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
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, 13: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, 14:35   #10
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
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, 15: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, 17:50   #12
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
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, 12: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, 13:07   #14
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
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, 14: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, 15: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, 15:59   #17
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
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, 16: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, 20: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, 11: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


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
ESA: rilevati 40 mila asteroidi vicino a...
La batteria salva fabbriche di EQORE ott...
SpaceX Starship: iniziati i test della t...
Datacenter IA nello spazio entro 5 anni,...
Telescopio spaziale James Webb: rilevato...
Ericsson Mobility Report: nel 2025 il 5G...
PLAI DEMO DAY: si chiude il secondo cicl...
Google rilascia Nano Banana Pro: il nuov...
ChatGPT si rinnova ancora: disponibile l...
Ring lancia super sconti di Black Friday...
Black Friday 2025: 450 euro di sconto su...
Tutte le offerte Blink in un unico posto...
OpenAI e Foxconn uniscono le forze per r...
Ricarica delle auto elettriche in 3 minu...
Lucid presenta Gravity Touring, il SUV e...
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: 00:19.


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