Newsgroup: it.comp.os.linux.development
Titolo: Domanda molto stupida

Sto' realizzando un programma in C e con ncurses per l'azineda in cui
lavoro. Il programma deve spedire delle poste elettroniche con i dati
che gli vengono passati dal programma. Siccome il personale addetto è
molto stupido e sà usare pochissimo il PC, ho inserito nel mio programma
una funzione che si chiama log_writer e che mi logga passo passo quello
che l'utente fa.
struct log_vanessa
{
	char nome[255];		/* Questo è il nome del file di log con tutta la
 						sua path per intero... */
	char data[12];		/* Qui ci va' la data corrente... */
	char ora[10];		/* Qui ci va' l'ora corrente... */
};
Questa è la struttura che uso per passare i dati alla funzione
log_writer.
Come secondo passaggio ho definito due puntatori alla struttura sopra
indicata, uno mi serve per il log del mio progamma, l'altro per scrivere
e leggere dall'hard disk (Poi pensavo di utilizzare un'altro puntatore
per loggare le stampe). Il problema che mi si pone è questo:
Se passo l'esecuzione del programma dentro una funzione e poi magari
dentro altre funzioni, come di solito accade, come faccio a passare a
tutte le funzioni i miei puntatori? Avevo pensato di dichiarare i
puntatori esternamente al programma...
Ci sono altre soluzioni???
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Ci sono altre soluzioni???
Beh, se di C parli, credo che una buona soluzione consista nel creare un 
file .c che definisca tutte le variabili che ti servono come static 
fuori dalle funzioni, cosi` sono visibili solo in quel file .c, e poi ti 
definisci una funzione per inizializzare la struttura e una funzione per 
loggare. Inutile passar puntatori a destra e a sinistra quando non serve.
Il risultato netto e` gli altri vedono solo cio` che possono usare, e 
l'implementazione del log e` completamente nascosta (agli altri).
Del tipo: mylog.c
---[mylog.c]-------------------------------------------------------------------
#include <stdio.h>
/* Questo variabile (che e` un puntatore) e` visibile solo all'interno
  * di questo file. Si possono ovviamente dichiarare (e definire)
  * tutte le variabili che si vogliono, e con "static" rimangono
  * locali a questo file.
  */
static FILE * log_file = NULL;
/* Questa funzione e` visibile a tutti */
int
log_init(const char * filename)
{
    if(log_file)
    {
        fclose(log_file);
        log_file = NULL;
    }
    log_file = fopen(filename,"a");
    if(! log) { return 1; }
    return 0;
}
/* Questa funzione e` visibile a tutti */
void
log_write(const char * message)
{
     if(log_file)
     {
         fprintf(log_file,"%s\n",message);
         fflush(log_file);
     }
}
---[mylog.h]-------------------------------------------------------------------
#ifndef mylog_h
#define mylog_h
int log_init(const char * filename);
void log_write(const char * message);
#endif
-- 
   |   \    \  | ___|_  |_  | ianezz a casa sua... :-)
   |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
  _|_/  _\_|  _|____|___|___| 
http://www.linuxtrent.it

 Ci sono altre soluzioni???
ma scusa, passare i puntatori direttamente alle funzioni non va bene?
Oppure in un file .c ti definisci la struttura (anche senza static), poi
dentro le varie funzioni nel file con le funzioni di log dichiari la
struttura extern, cosě non devi nemmeno passarla.