Torna indietro   Hardware Upgrade Forum > Software > Programmazione

 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
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: 9505
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: 9505
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: 9505
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: 9505
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: 9505
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: 9505
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: 9505
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: 9505
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


 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
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...
Google condannata in Svezia: dovrà...
Samsung Foundry aggiorna la roadmap: il ...
La Cina risponde a NVIDIA con LongCat-2....
Godox C100: la prima fotocamera del marc...
Boom IA e affitti fuori controllo: chi l...
Le RTX 5000 abbattono il muro dei 4 GHz,...
Onimusha: Way of the Sword non sar&agrav...
Anche Microsoft anticipa al 2029 il pass...
Sei falle in AirDrop e Quick Share: cras...
Altri tagli in arrivo in casa XBOX: a ri...
Quando l'IA entra nei processi: due part...
La contea con più data center del...
Galaxy Ring 2, Samsung conferma lo svilu...
1TB e velocità di scrittura garan...
Volkswagen apre alla produzione europea ...
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: 06:09.


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