Newsgroup: it.comp.lang.c++
Titolo: help me!

ciso s tutti, 
sto realizzando un progr di comunicaz tra client e server.
girano tutti e due, ma le risposte sono:
client: aprendo2: gira ma non termina (penso a causa della mancata terminaz 
corretta del server)
server: riceve il pid del client e poi mi da "segmentation fault"
 
********************inizio client********************************
#include <sys/types.h>
#include <sys/stat.h>
#include "sysmacro.h"
#include <fcntl.h>
#include <unistd.h>
#define MAXS 100
char *prova="/tmp/pipetest";
char messaggio[MAXS];
int main(){
        int nome=getpid();
        char *pacch;
        sprintf(pacch,"%d",nome);
        invia(pacch);
        ricevi(pacch);
        return(0);
        }
int invia(char *mes){//il cliente invia il proprio pid
        int fd;
        IFERROR(fd=open(prova, O_WRONLY),"aprendo");
        IFERROR(write(fd,mes,MAXS),"scrivendo");
        IFERROR(close(fd),"chiudendo");
        return(0);
}
int ricevi(char *miopid){//ricevi il pid del gest
        int fd2;
        int mespid=(int)messaggio;
        IFERROR(fd2=open(miopid, O_RDONLY),"aprendo2");
        while(read(fd2, messaggio, MAXS)>0);
        {
                WRITE("pid server =");
                WRITELN(mespid);
        }
        IFERROR(close(fd2),"chiudendo2");
        return(mespid);
}
************************fine client*****************************************
********************inizio server*******************************************
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include "sysmacro.h"
#define MAXS 100
char *prova="/tmp/pipetest";
char messaggio[MAXS];
int pidserv;
int invia();
int ricevi();
int main(){
        int var;
        mkfifo(prova, 0644);
        var=ricevi();
        mkfifo(var,0644);
        invia(var);
        return(0);
}
 
int ricevi(){//riceve un info dal client
        int fd;
        int pidclient=(int)messaggio;
        IFERROR(fd=open(prova, O_RDONLY),"aprendo1");
        while(read(fd,messaggio,MAXS)>0)
        {WRITELN(pidclient)}
        IFERROR(close(fd),"errore in chiusura1");
        return(pidclient);//ritorna il pid del client castato
}
int invia (int n){//gli passa il pid del cliente x inviare info
        int fd2;
        char *numcast;
        pidserv=getpid();
        numcast=(int)pidserv;
        sprintf(numcast, "%d", pidserv);
        IFERROR(fd2=open(n, O_WRONLY), "aprendo2");
        IFERROR(write(fd2, numcast, MAXS),"scriv");
        return(0);
}
**********************************fine server*******************
*****************************sysmacro.h**************
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#define MAX 100 //x interi
#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
#define STDOUT 1
#define STDERR 2
********************fine sysmacro.h*******************************
un grazie gigantesca a chi mi aiuta, un grazie grosso a chi ci prova.
-- 
byez, gattorosso 2k
-chi di voi crede di essere religioso, pecca di superbia!
-- 
byez, gattorosso 2k
-chi di voi crede di essere religioso, pecca di superbia!

         sprintf(pacch,"%d",nome);
Non mi stupisce il segfault: "pacch" e' solo dichiarato e non
inizializzato, contiene garbage e punta chissa' dove.  I miei consigli
sono: 1) quello di studiare per bene il linguaggio, perche' questi
sono errori da principiante; 2) per la IPC, quello di procurarti
"Advanced programming in the Unix environment" del compianto
W. Richard Stevens e di studiarlo per benino.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy          loreti at pd dot infn dot it

Un tale, che si fa chiamare Maurizio Loreti scrisse:

grazie dell'aiuto prof, 
io in effetti sono un principiante della programmazione.
sto studiando su una dispensa "programmazione di sistema in c++" e non 
conoscendo le differenze tra c e c++ mi sono fidato di un qualche suo 
collega che ha scritto la dispensa...
cmq adesso ho comprato "c++ linguaggio, librerie standard, principi di 
programmazione"  del maestro Bjarne Stroustrup (è un buon libro? è quello 
giusto?) per studiarlo per conto mio, al di la degli impegni accademici..
