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 03-07-2004, 14:07   #1
Ricky
Senior Member
 
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
pipe...cosa e quanto si può trasferire ad un figlio?

ragazzi.....premettendo che sto uscendo pazzo co sto sistemi operativi....sapete come funziona bene una pipe??
cioè posso trasferire interi? posso trasferire più di un inf? se si mi aiutate facendo qualche esempio...ve ne sarei grato!!!
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300...
Ricky è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 22:50   #2
Dun
Senior Member
 
L'Avatar di Dun
 
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
Beh, puoi trasferire tutto quello che vuoi anche struttture dati piuttosto complesse....sta a te pero' dirgli che stai scrivendo tot byte. In ogni caso il terzo argomento di solito e' un bel sizeof(struttura_dati_che_contiene_cio_che_le_vuoi mandare).


Se ben ricordo cmq hanno una loro dimensione...ovvero, hanno un buffer definito.....PIPE_BUF mi pare. Nel caso tu voglia trasferire piu' byte di PIPE_BUF non hai piu' garanzie di atomicita' nella read e nella write.

Cya!
Dun è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2004, 23:40   #3
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9505
Re: pipe...cosa e quanto si può trasferire ad un figlio?

Quote:
Originariamente inviato da Ricky
ragazzi.....premettendo che sto uscendo pazzo co sto sistemi operativi....sapete come funziona bene una pipe??
cioè posso trasferire interi? posso trasferire più di un inf? se si mi aiutate facendo qualche esempio...ve ne sarei grato!!!
Puoi scrivere su una pipe qualsiasi cosa sempre che tu ti mantenga al di sotto di una certa soglia oltre la quale la pipe non puo' piu' bufferizzare. Questa soglia e' ottenibile mediante delle macro predefinite o, ancor meglio, mediante una funzione di libreria (Non ricordo il nome...)
Due semplici e banali esempi;
Codice:
se so che devo ricevere dalla pipe un intero:
...
int number;
read(fd0, &number, sizeof(int));
printf("Intero ricevuto: %d\n", *number);
...

se so che devo ricevere una stringa lunga non piu' di 100 byte:
...
int readed;
char * buffer = malloc(sizeof(char) * 100 +1);
readed = read(fd0, buffer, 100);
buffer[readed] = '\0';/*Aggiungo esplicitamente il carattere di terminazione alla stringa*/
printf("Stringa ricevuta: %s\n", buffer);
...
Bye
__________________
"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, 00:46   #4
akyra
Senior Member
 
L'Avatar di akyra
 
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
ricorda che le pipe anonime, solitamente, hanno dimensione fino a 5 K, mentre le FIFO (pipe con nome) hanno dimensione max fino a 40 K....
__________________
akyra è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 11:10   #5
Ricky
Senior Member
 
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
la mia situazione è questa:
il processo padre deve mandare tramite una pipe un intero al figlio p1, vado a fare la write, quando ci passo un carattere tutto bene (facccio poi io la conversione) ma un intero niente...mi esce un numero tutto sballato!
faccio cosi,

/*padre*/
close(fd[0]);
write(fd[1],2,1) //* ho provato anche con una variabile

/*poi nel figlio*/

close(fd[1]);
read(fd[0],&temp,1);

poi un altra domanda...come faccio a passargli due interi....faccio un write e poi ne faccio un altro.....come posso fare?
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300...
Ricky è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 11:13   #6
Ricky
Senior Member
 
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
come non detto dovevo mettere il sizeof!! però il secondo problema rimane


ah un altra cosa...scusate sono proprio un rompiballe ma domani ho il laboratorio(ESAMEE)....
posso scrivere un intero in un file...? cioè con le funzioni read e write sul man ho trovato che posso passare char *buf...altrimenti so cazzi......devo fare la conversione?
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300...
Ricky è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 12:20   #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
ragazzi io ho provato a trasmettere una struttura attraverso una pipe ma mi dà errore in fase di compilazione.
Codice:
typedef struct messaggio {
    int direzione;
    char c;
} msg;
 ...

msg nuovo_msg;
nuovo_msg.direzione=OE;
nuovo_msg.c='s';
write (pipe, nuovo_msg, sizeof(msg));
mi dà errore in fase di compilazione...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 12:37   #8
Ricky
Senior Member
 
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
gaurda che devi scrivere nella parte della pipe in cui è prevista la scrittura...ovvero
se definisci

int fd[2]
pipe(fd)

fd[0] sarà la parte in lettura ed fd[1] la parte in scrittura
ogni volta prima di scrivere devi chiudere la parte che non ti serve e poi utilizzare il write:

close(fd[0]);
write(fd[1],"scrivonellepipe",15);


prova un pò!
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300...
Ricky è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 12:44   #9
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Potresti trasformare l'int in una coppia di char... se non ricordo male, il char ha le dimensioni di un byte, mentre l'int (di solito) di 2... e a volte di 4, dipende dalla macchina e dal Sistema Operativo.

Sotto queste ipotesi, forse questo funziona:

/* Prima il MSB, poi il LSB */
int i=...

...

char a=(char)((i - (i % 256)) \ 256);
char b=(char)(i % 256);

E poi scrivi prima a e poi b sul file; quando li leggi, ripeti le operazioni al contrario.

Spero che funzioni...
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 13:37   #10
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9505
Quote:
Originariamente inviato da akyra
ricorda che le pipe anonime, solitamente, hanno dimensione fino a 5 K, mentre le FIFO (pipe con nome) hanno dimensione max fino a 40 K....
Hai detto bene... Solitamente ! Meglio utilizzare la funzione apposita che ne restituisce la dimensione sulla piattaforma su cui si sta operando.
__________________
"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:40   #11
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9505
Quote:
Originariamente inviato da VegetaSSJ5
ragazzi io ho provato a trasmettere una struttura attraverso una pipe ma mi dà errore in fase di compilazione.
Codice:
typedef struct messaggio {
    int direzione;
    char c;
} msg;
 ...

msg nuovo_msg;
nuovo_msg.direzione=OE;
nuovo_msg.c='s';
write (pipe, nuovo_msg, sizeof(msg));
mi dà errore in fase di compilazione...
Alla write mica devi passare il nome della pipe. Sia che si tratti di pipe senza nome, sia che si tratti di pipe con nome, alla write(...) devi passare il descrittore del file restituito dalla open (In sola scrittura o in letturascrittura) sulla pipe.
__________________
"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:55   #12
Ricky
Senior Member
 
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
ma nessuno mi sa dire se posso scrivere due volte su una stessa pipe e leggere due volte da un altro processo.....cioè che faccio la apro la chiudo e la riapro...che posso fa?
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300...
Ricky è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 14:50   #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 Ricky
gaurda che devi scrivere nella parte della pipe in cui è prevista la scrittura...ovvero
se definisci

int fd[2]
pipe(fd)

fd[0] sarà la parte in lettura ed fd[1] la parte in scrittura
ogni volta prima di scrivere devi chiudere la parte che non ti serve e poi utilizzare il write:

close(fd[0]);
write(fd[1],"scrivonellepipe",15);


prova un pò!
si questo è ovvio, solo che l'ho omesso nell'esempio che ho scritto prima.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 14:52   #14
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
Alla write mica devi passare il nome della pipe. Sia che si tratti di pipe senza nome, sia che si tratti di pipe con nome, alla write(...) devi passare il descrittore del file restituito dalla open (In sola scrittura o in letturascrittura) sulla pipe.
Codice:
int miapipe[2];
if (pipe(miapipe)) printf("ERRORE");
close(miapipe[INPUT]);
write(miapipe.....)
io intendevo questo. cmq il problema sta nel fatto che non mi trasmette la struttura come messaggio nella pipe. come posso fare per far trasmettere una struttura come messaggio??
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 15:55   #15
Ricky
Senior Member
 
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
write (pipe, nuovo_msg, sizeof(msg));

prova con write (pipe, &nuovo_msg, sizeof(msg));

ma sicuro che si mette sizeof(msg) ? non si mette sizeof(messaggio)?
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300...
Ricky è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 22:17   #16
Dun
Senior Member
 
L'Avatar di Dun
 
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
Quote:
Originariamente inviato da Ricky
write (pipe, nuovo_msg, sizeof(msg));

prova con write (pipe, &nuovo_msg, sizeof(msg));

ma sicuro che si mette sizeof(msg) ? non si mette sizeof(messaggio)?

Esatto, alla write devi passare un puntatore -> quindi un indirizzo.

E' corretto anche sizeof(msg).

Nel caso nuovo_msg fosse stato un puntatore allora no, il sizeof ritorna la dimensione del puntatore che e' 4byte.

Potresti pero' fare un sizeof(*nuovo_msg).

EDIT: Avevo cannato a scrivere

Ultima modifica di Dun : 05-07-2004 alle 00:10.
Dun è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2004, 23:48   #17
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9505
Quote:
Originariamente inviato da VegetaSSJ5
Codice:
int miapipe[2];
if (pipe(miapipe)) printf("ERRORE");
close(miapipe[INPUT]);
write(miapipe.....)
io intendevo questo. cmq il problema sta nel fatto che non mi trasmette la struttura come messaggio nella pipe. come posso fare per far trasmettere una struttura come messaggio??
Azzo non me ne ero accorto... Devi mettere l'indirizzo.

write(miapipe, &nuovo_msg, sizeof(msg));

Prova...
__________________
"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, 23:54   #18
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9505
Quote:
Originariamente inviato da Dun
Esatto, alla write devi passare un puntatore -> quindi un indirizzo.

E' corretto anche sizeof(msg).

Nel caso msg fosse stato un puntatore allora no, il sizeof ritorna la dimensione del puntatore che e' 4byte.

Potresti pero' fare un sizeof(*msg).
Scusa cosa vorrebbe dire fare '*msg' dato che msg e' un nuovo tipo (tipo puntatore secondo quello che hai suggerito) e non una variabile ?!
Magari si potrebbe fare, supposto msg un tipo puntatore:
Codice:
msg myP;
...
...
write(..., myP, sizeof(*myP));
...
Anche se non sono sicuro che sia del tutto esatto mettere sizeof(*myP)...
__________________
"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, 00:08   #19
Dun
Senior Member
 
L'Avatar di Dun
 
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
Quote:
Originariamente inviato da Ed_Bunker
Scusa cosa vorrebbe dire fare '*msg' dato che msg e' un nuovo tipo (tipo puntatore secondo quello che hai suggerito) e non una variabile ?!
Magari si potrebbe fare, supposto msg un tipo puntatore:
Codice:
msg myP;
...
...
write(..., myP, sizeof(*myP));
...
Anche se non sono sicuro che sia del tutto esatto mettere sizeof(*myP)...
Scusa ho sbagliato a scrivere, adesso ho editato. Cmq a scanso di equivoci...

Ci sono due casi:
1) Dichiari la struttura dati nello stack: msg myP

In questo caso allora:
nella write utilizzi &myP
e come sizeof invece sizeof(myP) oppure sizeof(msg)

2) Dichiari la struttura nello heap attraverso un ptr e la allochi tramite malloc: msg *myP; myP = (msg *) malloc(sizeof(msg));

Qua invece nella write utilizzi myP
e come sizeof, sizeof(*myP) oppure sizeof(msg);


In effetti anche a me non tornava l' utilizzo del sizeof passandogli la dereferenziazione del puntatore ma l'ho appena provata sotto gcc 3.3.4 con flag -Wall quindi dovrebbe andare

Ultima modifica di Dun : 05-07-2004 alle 00:11.
Dun è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 00:41   #20
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9505
Mmm... dubbio derivante da memoria corta e sonno sovrastante...
Codice:
/*Se ho una struttura siffatta:*/

struct myS{
char * a;
char * b;
int num;
}

/*dichiaro due variabili:*/

struct myS first;
struct myS second;
/*Inizializzo i campi di first*/
first.a = "NeutralMilkHotel";
first.b = "InTheAeroplaneOverTheSea";
first.num = 1998;
/*Adesso quelli di second*/
second.a = "MC5";
second.b = "Tonight";
second.num = 1970;
/*Facendo poi:*/
int L1 = sizeof(struct myS);
int L2 = sizeof(first);
int L3 = sizeof(second);
L1 == L2 == L3 ?!?!?

thks
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è 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: 21:27.


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