View Full Version : [C] System call write... info sugli interi
xsatellitex
08-12-2007, 13:26
Ma perche quando voglio stampare un intero ad esempio a video con:
int i=5;
write(1,&i,sizeof(int));
mi stampa caratteri strani... perche??
con le stringhe e i caratteri non ho problemi.. qualcuno lo sa?
ilsensine
08-12-2007, 13:35
Perché stai stampando la sequenza di caratteri 0x05 0x00 0x00 0x00, che lo schermo visualizza...come caratteri :D
Prova così:
dprintf(fileno(stdout), "%d", i);
Ma perche quando voglio stampare un intero ad esempio a video con:
int i=5;
write(1,&i,sizeof(int));
mi stampa caratteri strani... perche??Perché non è il modo corretto per stampare a video un valore numerico. Stai semplicemente inviando sullo standard output i 4 byte che compongono il valore intero.
Usa printf o se proprio vuoi usare write, almeno converti prima il numero in stringa e mandala in output con write.
xsatellitex
08-12-2007, 14:35
uh è vero :muro:
ho provato a utilizzare itoa per la conversione
int i=5;
char c[10];
itoa(i,c,10);
ma compilando sotto linux mi dice ld returned 1 exit status.
Pensavo bisognava inserire la libreria stdlib.h e stdio.h ma me lo fa lo stesso :muro:
ovviamente il pacchetto build-essential gia installato
ilsensine
08-12-2007, 14:46
Perché itoa non è una funzione standard, le libc non la implementano. Puoi usare la sprintf (oppure direttamente la dprintf come ti ho suggerito).
xsatellitex
08-12-2007, 16:48
si la fprintf va bene il problema è che devo utilizzare le system call anche perche poi devo scrivere anche su file con la write
ilsensine
08-12-2007, 16:49
si la fprintf va bene il problema è che devo utilizzare le system call anche perche poi devo scrivere anche su file con la write
La dprintf effettua da sola la sprintf + write, cosa ha che non va?
xsatellitex
08-12-2007, 16:52
ah non lo sapevo... grazie :D
xsatellitex
09-12-2007, 12:51
Scusate un ultima domanda al riguardo:
Perche con write e read riesco a scrivere e leggere correttamente gli interi nella pipe . Ad esempio:
int piped[2];
pipe(piped);
int a=2;
int b;
write(piped[1],&a,sizeof(int));
read(piped[0],&b,sizeof(int));
e invece nei casi di file e outputvideo (come precedentemente ho detto) non funge e devo utilizzare dprintf?
non dovrebbe essere la stessa identica cosa?
Ho sempre saputo che le pipe sono trattate come file.
ilsensine
09-12-2007, 20:46
Sì è la stessa cosa, i dati che transitano sono gli stessi. Quando li stampi a video però li devi convertire da numeri a stringhe!
xsatellitex
09-12-2007, 21:44
pero' con la write non riesco a stampare ne a video ne su file gli interi... come mai con la pipe questo non succede?? non capisco :muro: :muro:
xsatellitex
09-12-2007, 22:07
scusa ho risolto mi ero dimenticato che il printf converte direttamente in stringa. Ho provato questo programma:
main(){
int n=88,f;
int fd1=open("/home/xxxxx/Scrivania/a",O_RDWR);
write(fd,&n,sizeof(int));
read(fd1,&f,sizeof(int));
printf("%d\n",f);
}
funziona correttamente e mi stampa il numero 88 a video.Pero' se provo ad aprire il file leggo nei caratteri ASCII.
Il problema è che se volessi trattare i dati salvati sul file come interi e non come stringa... come dovrei fare?
con la dprintf li salvo sul file convertiti in stringa.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.