[C]lavorare con i puntatori a void

di il
4 risposte

[C]lavorare con i puntatori a void

Salve a tutti
devo realizzare un progetto per l'università e mi sono bloccato con questa funzione

send(char *dest, char *obj, void *buf, size_t size)
il problema è che non so come lavorare con il puntatore a void
dovendo mandare questi dati ad un altro processo tramite pipe mi serve sapere la dimensione dei dati puntati da buf nel caso debba spezzettarli.
E' possibile oppure l'unica soluzione è un cast?
grazie

4 Risposte

  • Re: [C]lavorare con i puntatori a void

    [delete]

    A una certa eta devo tener conto della demenza senile.
    Devi castare, size è la dimensione del buffer.... ma forse non capisco la domanda...?!
  • Re: [C]lavorare con i puntatori a void

    È un pò difficile da spiegare.
    Quella funzione serve per mandare un messaggio e buf è il corpo del messaggio.
    Il puntatore è void perchè non è detto che la codifica del testo sia ASCII (potrebbe essere Unicode...)
    e penso che castandolo a char* qualche informazione vada persa.
    Mi basta trovare un modo per shiftare il puntatore in questo modo:
    Se il messaggio occupa 4 byte però la pipe ne ha liberi 2, io vorrei essere in grado di scrivere i primi 2, shiftare il puntatore in modo che punti al primo byte da scrivere.
    Per le mie conoscenze, questa cosa non si può fare, però magari c'è un modo per lavorare direttamente sui byte a prescindere dal tipo di dato che non conosco.
    Spero di essermi spiegato
  • Re: [C]lavorare con i puntatori a void

    Forse ho bevuto troppo ma unicode non è sempre un char*?vabbhe?
    se devi inviare te il messaggio allora sei te ad avere il parametro buf da inviare e quindi sei a conoscenza di buf,soluzione basta un cast.
    Il problema forse è la ricezione,quando ti arriva il messaggio magari non sai cosa contiene buff.
    Dato che "una volta" non esisteva void* ma esisteva semplicemente char*,poi un bel giorno si son detti (quelli della iso...) che era meglio chiamarlo void* per non confondere i programmatori cosi hanno fatto,rimane poi una considerazione molto importante,con il tipo char* puoi rappresentare tutti i tipi di dato,perchè char è il piu semplice ovvero 1byte quindi char* è un puntatore ad un byte e quindi non potrai mai avere nessun genere di perdita di informazioni facendo un casting al tipo char.
    
    void *buff=(void*)getbuff(.....);//immaginaria
    char *dato=(char*)buf;
    
    ora con dato potrai fare ciò che vuoi e una volta finito potrai ripassarlo alla funzione senza problemi:
    
    send(MY_DEST,OBJ,(void*)dato,sizeof(dato));
    
  • Re: [C]lavorare con i puntatori a void

    vbextreme ha scritto:


    forse ho bevuto troppo ma unicode non è sempre un char*?vabbhe?
    non so il perchè ero convinto che venisse usata la codifica ASCII per i char
    se devi inviare te il messaggio allora sei te ad avere il parametro buf da inviare e quindi sei a conoscenza di buf,soluzione basta un cast.
    grazie mille per la risposta
Devi accedere o registrarti per scrivere nel forum
4 risposte