Newsgroup: it.comp.lang.c
Titolo: help me - casting

ciao a tutti,
sto scrivendo un programma che simula il comportamento di un cellulare,
colamente che mi sono arenato....
il programma qui sotto non è riportato nella sua interezza, ma solam i punti
cruciali.
a i di voi mi puo' autare saro' veramente grato.
*********************************************
//programma: clienteclassi.
#include <sys/types.h>
#include <sys/stat.h>
#include "sysmacro.h"
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#define MAXS 100
char *prova="/tmp/pipetest";             //i cellulari comunicano via pipe
struct messaggio {
 char msg[160];                 //il messaggio deve essere di 160 caratteri
max. contine anche:
 int mittente;                       //il numero di telefono del mittente
 int tipomess;                     // un identificativo (int) di tipo di
messaggio
} sms;                                                  //questo è la
struttura dell'sms
int invia(struct messaggio sms);
int main(){
 int nome=getpid();                   //nome del telefono = al suo pid
        char *pacch;                    //devo infilare il pid che è intero
in questo array di 160 posiz di caratteri
 int a;
 *pacch=(char)nome;      //ho provato anche a passarlo come puntatore, ma
non è la soluzione giusta (oltre a non fungere!)
 sms.msg= *pacch ;//       c'è un cruccio di casting!        ----se lo
lasciassi così darebbe un segmentation fault, quando gira.
 sms.mittente=nome;
 sms.tipomess=1;
        invia(sms);
        return(0);
}
int invia(struct messaggio sms){
//il cliente invia il proprio pid
        int fd;
 char mes;
 sprintf (mes, &sms);
//il "mes" che viene passato nella write puo' solo essere una char[]
        IFERROR(fd=open(prova, O_WRONLY),"aprendo");       //quindi... devo
castare una struct in char o cosa?????come????
        IFERROR(write(fd, mes,MAXS),"scrivendo");
        IFERROR(close(fd),"chiudendo");
        return(0);
}
****************inizio sysmacro.h*************
/*File:          sysmacro.h
 * Specifica: macro x chiamate di sistema
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#define IFERROR(s,m) if((s)==-1) {perror(m); exit(errno);}
#define IFERROR3(s,m,c) if((s)==-1) {perror(m); c;}
#define WRITE(m) IFERROR(write(STDOUT,m,strlen(m)), m);
#define WRITELN(m) WRITE(m);WRITE("\n");
#define STDIN 0
#define STDOUT 1
#define STDERR 3
  *******************************************************+
lo so che programmare con l'appoggio di una macro è una cosa schifosa, ma
sua maesta' cervellone docente ha pensato che sia meglio così..
mi scuso x eventuali omissioni o dimenticanze, fatemi pure quante domande
ritenete necessario, ma xpiacere aiutatemi a giungere alla soluzione.
ringrazio tutti quanti ci provino.



 castare una struct in char o cosa?????come????
7) Non si puo' "castare" una struct in un char!!!!!! Dovresti decidere il
formato con cui scrivere i tuoi dati sul file, ad esempio:
char mes[560];
sprintf (mes, "msg di tipo %d da
%d:%s\n",sms.tipomess,sms.mittente,sms.msg);
o qualcosa del genere.
[cut]
Spero che sia tutto abbastanza chiaro.
DM
--------------------------------
Inviato via 
http://usenet.libero.it

Per la conversione dell'intero in carattere utilizza la funzione itoa(...)
che si trova nella stdlib.h


 che si trova nella stdlib.h
Non e` standard.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"Su cio` di cui non si puo` parlare e` bene tacere".
 Ludwig Wittgenstein

Okkey, allora usa la sprintf.
quella è presente nei sistemi unix...
sprintf(strBuffer, "%s", lngPID);
gli dici di convertire lngPID nel formato specificato (%s) e lo inserisce in
strBuffer.
