Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-07-2004, 15: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, 23: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 04-07-2004, 00:40   #3
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9473
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, 01: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, 12: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, 12: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, 13: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, 13: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, 13: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, 14:37   #10
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9473
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, 14:40   #11
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9473
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, 14: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, 15: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, 15: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, 16: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, 23: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 01:10.
Dun è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 00:48   #17
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9473
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 05-07-2004, 00:54   #18
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9473
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, 01: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 01:11.
Dun è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2004, 01:41   #20
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9473
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


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Aetherflux e Lockheed Martin insieme per...
SpaceX sta proseguendo i test della terz...
Axiom Space ha mostrato un nuovo video d...
Realme: la trasformazione in sub-brand d...
PlayStation 6 si farà attendere: ...
BWT Alpine chiude la prima tornata di pr...
Beyond Good & Evil 2 non è st...
Qualcomm: il CEO ha guadagnato quasi 30 ...
AMD: 'Non importa cosa dice Intel, i mig...
Non è solo colpa del mercato: il ...
3 smartphone ai prezzi più bassi ...
Pwn2Own Automotive 2026 da record: 76 ze...
Più watt, più bassi e subwoofer incluso:...
Xiaomi POCO F8 Pro, un top di gamma a 54...
Tassa di 2 euro sui piccoli pacchi: un a...
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: 07:58.


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