|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2001
Messaggi: 27
|
[C] Chat in locale in C
Premetto che ho pochissime basi della programmazione in C, ho fatto qualcosa in C++ e ultimamente mi sono dedicato esclusivamente a Java. Tornare ad un linguaggio procedurale dopo aver fatto di tutto con gli oggetti non è proprio bello... cmq dovrei sviluppare una Chat in C in locale, quindi senza alcun uso di protocolli di rete,socket e tutto il resto.
Quello che ho pensato è che dovrei creare un processo server che allochi una memoria condivisa con un certo numero di processi client che scriveranno concorrentemente in questa memoria(sincronizzati da un opportuno semaforo), sarà poi il server a inviare il messaggio ricevuto a tutti gli altri client connessi... Il ragionamento va bene? Quello che ho scritto fino ad ora sembra funzionare ma non so se va bene per quello che dovrei fare... SERVER #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include <stdlib.h> char messaggio[256]; int shmid; int *shmPtr; // puntatore alla memoria int main(int argc, char *argv[]) { int ds_shm, ris; key_t chiaveMemoria = 4321; // chiave della memoria shmid= shmget(chiaveMemoria, 32, IPC_CREAT|0600); // creo la memoria condivisa if ( shmid == -1 ) printf("Errore nella chiamata shmget\n"); if ( shmid > 0 ) printf("Memoria allocata correttamente\n"); shmPtr=shmat(shmid,0,0); return 0; } CLIENT #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <sys/shm.h> #include <sys/stat.h> #include <fcntl.h> #include <signal.h> # include <string.h> #define SHMSIZE 1000 #define DISP_ 20 char messaggio[256]; void invia(int ds) { char *p; p = shmat(ds, 0 , SHM_W); if ( p == (char*) -1 ) printf("Errore nella chiamata shmat"); puts("Inizia a scrivere: ('quit‘ per terminare):"); do { scanf("%s", messaggio); strncpy(p, messaggio, DISP_); p += DISP_; } while( (strcmp(messaggio,"quit") != 0)); exit(0); } int shmid; char messaggio[256]; int *shmPtr; // puntatore alla memoria int main(int argc, char* argv[]){ key_t chiaveMemoria = 4321; // chiave della memoria shmid=shmget(chiaveMemoria, 0, 0); // ci attacchiamo alla memoria condivisa if(shmid > 0) printf ("Memoria collegata correttamente\n"); if(shmid == -1) printf ("Memoria non collegata correttamente\n"); invia(shmid); exit(0); } Suggerimenti se quello che ho scritto va bene e su come continuare? Grazie a tutti in anticipo
__________________
Nottarget Ultima modifica di Nottarget : 06-06-2007 alle 17:11. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Non vedo la shm come molto indicata per una semplice chat. I socket sono più adatti.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:31.



















