Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Linux] Leggere un intero

2 views
Skip to first unread message
Message has been deleted
Message has been deleted

Dario

unread,
May 26, 2006, 5:59:58 AM5/26/06
to
Ho programmato per qualche anno in assembly per MIPS (architettura
RISC), dove avevo una comoda syscall che leggeva un intero e lo
restituiva in un registro.

Ho da poco cambiato piattaforma passando a Linux su x86 (uso la sintassi
di gas/gcc), e mi ritrovo molto spaesato poiché sono pochissimi gli
elementi in comune con l'architettura che usavo precedentemente.

In particolare, ho notato che attraverso int 0x80 non posso leggere il
numero intero direttamente; piuttosto mi restituisce una stringa
all'interno di un buffer. Ok, vorrà dire che leggerò i caratteri della
stringa per poi elaborarli con una formuletta per ottenere l'intero, ma
vorrei chiedervi un consiglio: mi conviene leggere un carattere alla
volta, quindi chiamare int 0x80 ad ogni carattere, oppure usare un
buffer (da 50 byte ad es.) e chiamare il kernel ad ogni esaurimento del
buffer? Tra queste due soluzioni, qual è la più efficiente a vostro
parere? Voi quale usate?

Inoltre: la syscall per la lettura (int 0x80 con il 3 in %eax, più i
vari parametri) restituisce qualcosa, ad esempio per segnalare un errore
o il raggiungimento dell'EOF?

Grazie.

null

unread,
May 26, 2006, 2:07:32 PM5/26/06
to
Dario wrote:

[cut]


> In particolare, ho notato che attraverso int 0x80 non posso leggere il
> numero intero direttamente; piuttosto mi restituisce una stringa
> all'interno di un buffer. Ok, vorrà dire che leggerò i caratteri della
> stringa per poi elaborarli con una formuletta per ottenere l'intero, ma
> vorrei chiedervi un consiglio: mi conviene leggere un carattere alla
> volta, quindi chiamare int 0x80 ad ogni carattere, oppure usare un
> buffer (da 50 byte ad es.) e chiamare il kernel ad ogni esaurimento del
> buffer? Tra queste due soluzioni, qual è la più efficiente a vostro
> parere? Voi quale usate?

sicuramente ti conviene leggere un blocco di caratteri alla volta, anche se
è abbastanza inutile reinventare tutte le volte la ruota quando le libc
fanno benissimo quello che chiedi

> Inoltre: la syscall per la lettura (int 0x80 con il 3 in %eax, più i
> vari parametri) restituisce qualcosa, ad esempio per segnalare un errore
> o il raggiungimento dell'EOF?

sì, testa eax, se ha il segno c'è stato un errore.
quando la read ritorna 0 è stato raggiunto l'eof.

--
sed -r 's/\.UI|UI\.//g'


Inviato da X-Privat.Org - Registrazione gratuita http://www.x-privat.org/join.php

0 new messages