Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-04-2008, 09:58   #1
*MATRIX*
Senior Member
 
Iscritto dal: Aug 2005
Messaggi: 439
[C] problema read e write

ciao raga

devo scrivere sotto unix codice in c

utilizzo io a basso livello quindi write e read

devo scrivere in un file di testo la lunghezza di una stringa

io scrivo

read (0 , stringa, 50);
write("file.txt",strlen(stringa),50);

ma quando compilo mi da questo errore
makes pointer from integer without a cast

come posso risolvere?

inoltre ho un piccolo quesito se volessi mettere un nome mio al file di testo
posso scrivere

write(STDIN_FILENO .........

e poi quando faccio partire l'eseguibile do il nome del file a mio piacimento?
è corretto?

Ultima modifica di *MATRIX* : 19-04-2008 alle 10:00.
*MATRIX* è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2008, 10:28   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da *MATRIX* Guarda i messaggi
utilizzo io a basso livello quindi write e read

devo scrivere in un file di testo la lunghezza di una stringa

io scrivo

read (0 , stringa, 50);
write("file.txt",strlen(stringa),50);

ma quando compilo mi da questo errore
makes pointer from integer without a cast

come posso risolvere?
Beh ma scusa, se usi l' I/O a basso livello si presuppone che tu sappia almeno cosa sono i "file descriptor". Il primo parametro di read()/write() non è certo un char* per il nome del file!! È un int che indica un descrittore di file. E lo ottieni ovviamente aprendo il file con una open() ... e da chiudere alla fine con una close().

Quote:
Originariamente inviato da *MATRIX* Guarda i messaggi
inoltre ho un piccolo quesito se volessi mettere un nome mio al file di testo
posso scrivere

write(STDIN_FILENO .........

e poi quando faccio partire l'eseguibile do il nome del file a mio piacimento?
è corretto?
No assolutamente ..... non ti è chiaro l'I/O.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2008, 10:32   #3
*MATRIX*
Senior Member
 
Iscritto dal: Aug 2005
Messaggi: 439
per il secondo ho risolto
open (argv[1] .....................

mi manca solo il primo

praticamente devo scrivere la lunghezza della stringa e la stringa nel file di testo

ovvero
ciao
4
bravo
5

e così via

per la fretta ho sbagliato a scrivere scusa

volevo dire

write(file1,stringa,buffersize) -> che funziona

ora ho messo
num=strlen(stringa)
write (file1 ,&num,buffsize ) -> che non va

dove sbaglio?

Ultima modifica di *MATRIX* : 19-04-2008 alle 10:35.
*MATRIX* è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2008, 10:40   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da *MATRIX* Guarda i messaggi
praticamente devo scrivere la lunghezza della stringa e la stringa nel file di testo

ovvero
ciao
4
bravo
5
Allora devi scrivere prima la lunghezza, poi la stringa.
E per la lunghezza immagino (perché in questo caso è più comodo e pratico) che tu voglia scriverla in modo binario, cioè scrivere i 4 byte che formano un int.

Quindi se tu volessi scrivere la lunghezza 4 e la stringa "ciao", nel file ci dovrebbero essere i byte:

04h 00h 00h 00h 63h 69h 61h 6Fh

Dove 63h è la 'c' ecc....

Se non è questo che devi fare o non ti è chiaro, spiega meglio la tua necessità.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2008, 11:19   #5
*MATRIX*
Senior Member
 
Iscritto dal: Aug 2005
Messaggi: 439
Quote:
Originariamente inviato da andbin Guarda i messaggi
Allora devi scrivere prima la lunghezza, poi la stringa.
E per la lunghezza immagino (perché in questo caso è più comodo e pratico) che tu voglia scriverla in modo binario, cioè scrivere i 4 byte che formano un int.

Quindi se tu volessi scrivere la lunghezza 4 e la stringa "ciao", nel file ci dovrebbero essere i byte:

04h 00h 00h 00h 63h 69h 61h 6Fh

Dove 63h è la 'c' ecc....

Se non è questo che devi fare o non ti è chiaro, spiega meglio la tua necessità.
no devo scrivere il numero intero

come da esempio
ciao
4
bravo
5
italia
6

mi spiego ancora meglio
inserisco la parola da tastiera e scrive la stringa e la sua lunghezza( intero) nel file txt
il mio programma funziona per la prima cosa
ma non mi inserisce la lunghezza nel testo

num=(strlen(stringa));
write(file1,stringa,50);
write(file1,&num,10);

Ultima modifica di *MATRIX* : 19-04-2008 alle 11:24.
*MATRIX* è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2008, 17:27   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da *MATRIX* Guarda i messaggi
no devo scrivere il numero intero

come da esempio
ciao
4
bravo
5
italia
6

mi spiego ancora meglio
inserisco la parola da tastiera e scrive la stringa e la sua lunghezza( intero) nel file txt
il mio programma funziona per la prima cosa
ma non mi inserisce la lunghezza nel testo

num=(strlen(stringa));
write(file1,stringa,50);
write(file1,&num,10);
No .. allora non hai capito cosa fa write e non hai capito la differenza tra scrittura di dati binari e di dati testuali.

Se vuoi scrivere righe di testo allora innanzitutto la sequenza di newline la devi scrivere esplicitamente tu, non te la mette di per sé il write(). Questo è il primo punto.

Il secondo punto è che se vuoi che nel file di testo venga scritto il carattere '4' se num vale appunto 4, allora lo devi formattare tu il numero in un array di char e poi scrivere la stringa formattata usando write().

Tu stai facendo:
write(file1,&num,10);

Così stai passando l'indirizzo della variabile num (che sicuramente è un int) e stai dicendo di scrivere 10 byte prendendoli a partire dall'indirizzo appena passato.
A parte il fatto che è sbagliato, perché un int ha solo tipicamente 4 byte, quindi stai scrivendo anche qualcos'altro ... e non si sa bene cosa ci sia in memoria dopo il 4° byte del int.
Ma oltre a tutto questo tu stai facendo appunto una scrittura binaria!!!! Questo forse non ti è ancora chiaro.

Se num valesse ad esempio 123456 (1E240h in esadecimale), allora quella tua riga scriverebbe 10 byte di cui 4 sono noti (sono i 4 byte del int) più 6 ... boh?

40h E2h 01h 00h ??h ??h ??h ??h ??h ??h

Ti è chiaro ora??? Prima per cortesia chiarisciti queste questioni che sono fondamentali.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2008, 12:41   #7
*MATRIX*
Senior Member
 
Iscritto dal: Aug 2005
Messaggi: 439
non credo di aver capito bene


num=(strlen(stringa));
questa istruzione restituisce un intero

se la dichiaro num come array di caratteri mi da errore

Ultima modifica di *MATRIX* : 21-04-2008 alle 12:48.
*MATRIX* è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2008, 13:07   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da *MATRIX* Guarda i messaggi
num=(strlen(stringa));
questa istruzione restituisce un intero

se la dichiaro come array di caratteri mi da errore
Non ha senso e non è così che devi fare.

Visto che oggi mi sento di avere molta pazienza, rispiego il tutto.

Le funzioni read() e write() semplicemente leggono/scrivono un tot di byte e basta. A queste funzioni si passa (oltre al descrittore, è chiaro) un indirizzo in memoria e un numero che indica quanti byte leggere/scrivere. Basta tutto qua.

Alla write() cosa ci sia in quel blocco di memoria non importa minimamente, lo scrive e basta. Alla read() cosa viene letto e "depositato" in memoria dal file altrettanto non importa.

Tu potresti passare l'indirizzo della variabile 'num' e indicare di scrivere 4 byte (la dimensione di un int). Tecnicamente è corretto ed è una cosa che si fa in caso di gestione ad esempio di file binari o che contengono strutture dati.

Ma così stai facendo una scrittura binaria. Stai scrivendo proprio i byte che compongono il valore della variabile.

Se vuoi scrivere un file di testo non è ovviamente l'approccio da seguire. Se num vale ad esempio 123 tu non devi scrivere i 4 byte che compongono l'int ma devi scrivere 3 caratteri '1' '2' '3'. Quindi una cosa molto ben diversa.

Quindi il numero lo devi formattare in stringa ad esempio tramite la funzione sprintf().

Codice:
int num;
char str[16];

num = strlen (tua_stringa);      // es. num = 123 (se tua_stringa ha 123 caratteri escluso il nullo)

sprintf (str, "%d", num);        // in str hai i caratteri '1' '2' '3' '\0'

write (fd, str, strlen (str));   // scrive i 3 caratteri '1' '2' '3'
Se devi scrivere delle linee, devi anche scrivere la sequenza di newline. Questo puoi farlo con un'altra semplice write a parte o nella sprintf sopra mettendo la sequenza di newline dopo lo specificatore di formato, in modo che faccia parte della stringa da scrivere.

Più chiaro ora?? Non dirmi che non è chiaro perché sennò mi va tutto di traverso che ho appena mangiato.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet

Ultima modifica di andbin : 21-04-2008 alle 13:18.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2008, 13:43   #9
*MATRIX*
Senior Member
 
Iscritto dal: Aug 2005
Messaggi: 439
ok ti ringrazio

ora ho capito

l'unico problemino ora e che non conta bene i caratteri sarà un problema i strlen

cmq ho capito non ero a conoscenza di sprintf mai usata
*MATRIX* è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Xiaomi 18 Pro e 18 Pro Max, i nuovi flag...
ESA e Mistral hanno stretto un accordo p...
AstroForge presenta Autonomy-1: un satel...
Neutralizzata da Microsoft EvilTokens, l...
Porsche mette alla prova i Tesla Superch...
Roborock Saros 20 Flow Complete arriva i...
Basta un comando digitato nel terminale ...
La corsa alla superintelligenza è...
Le memorie cinesi sfidano sé stes...
Dash cam 4K con doppia telecamera, GPS, ...
Qwen 4: Alibaba conferma l'addestramento...
Super El Niño, allarme globale: 451.000 ...
Toyota, 400.000 robot in fabbrica senza ...
Hanno bucato l'FBI e ora dettano le cond...
Standard sì, licenze no: la linea di Ope...
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: 03:51.


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