Forum dedicato alla programmazione.
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
da potenzio » sab apr 14, 2012 15:48
Salve a tutti, premetto che non ho molta esperienza nel programmare in C ( ho studiato un po' di C++ e Java); devo implementare un buffer per le operazioni di I/O a livello di bit, e non ho la piu' pallida idea di come fare, anche perche' mi e' stato chiesto di utilizzare per le operazioni di lettura e scrittura una maschera. Vi posto anche un po di codice che mi e' stato dato. Potete aiutarmi o darmi qualche spiegazione sul codice?? Grazie mille.
- Codice: Seleziona tutto
#define BITBUF_SIZE 4096
// dimensione del buffer in bit
#define BITBUF_SIZE_IN_BITS (BITBUF_SIZE * 8)
typedef struct
{
int POS ;
int LEN;
int mode; // 0 = READ; 1 = WRITE
int FD;
u_int8_t BUF[BITBUF_SIZE];
}BITFILE;
BITFILE* bitfile_open(char* filename,int mode)
{
int fd;
BITFILE* p;
if(mode!=0 && mode !=1)
{
return NULL;
}
fd=open(filename,(mode==0?O_RDONLY:O_WRONLY),0644);
if(fd<0)
{
printf("fail \n");
return NULL;
}
p=calloc(1,sizeof(BITFILE));
if(p==NULL)
{
close(fd);
printf("fail");
return NULL;
}
p->FD=fd;
p->mode=mode;
return p;
}
int bitfile_read(BITFILE* bfp,u_int64_t* dst,int nbits)
{
return(0);
}
int bitfile_write(BITFILE* P,u_int64_t D,int LEN)
{
u_int8_t mask;
mask &=(u_int8_t)0;
int OFS,K,RES,LEN2;
LEN2=LEN;
while(LEN2>0)
{
OFS=P->POS/8;
K=P->POS%8;
RES=8-K;
if(LEN2<RES)
RES=LEN;
mask=(1<<RES)-1;
P->BUF[OFS]&=(1<<K)-1;
P->BUF[OFS]|=(D & mask)<<K;
LEN2=LEN2-RES;
P->POS+=RES;
D>>=RES;
if(P->POS >= BITBUF_SIZE_IN_BITS)
{
safe_write(P->FD,P->BUF,BITBUF_SIZE);
P->POS=0;
}
}
return LEN;
}
int bitfile_close(BITFILE* P)
{
int OFS,K;
OFS=P->POS/8;
K=P->POS%8;
safe_write(P->FD,P->BUF,OFS);
close(P->FD);
bzero(P,sizeof(BITFILE)); //Azzeramento prima della chiusura
free(P);
return(0);
}
-
potenzio
- Linux 1.0

-
- Messaggi: 1
- Iscritto il: sab apr 14, 2012 15:33
Torna a Programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 1 ospite