mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: UNIX - system call EXEC ???

Salve,
    avrei bisogno di usare il comando GREP con la ridirezione
dell'output all'interno di un programma C:
execlp("grep","grep","subscribe","pippo.tmp",">","pluto.tmp",0);
Il problema è che non viene interpretato il simbolo ">" correttamente,
cioè viene eseguito grep della stringa subscribe nei file:
pippo.tmp  e   >pluto.tmp.
Se qualcuno ha qualche consiglio da darmi mi farebbe
un grande favore.
Grazie a tutti
-----------------------------------------
Paolo Diomede
pdio...@iol.it

 un grande favore.
Con il comando exec non puoi ridirigere l'output in quel modo.
Quando si fa uso della primitiva exec il processo che la invoca cede i
canali standard di comunicazione (input/output/error) al programma exec
che li usa per scambiare dati, per cui nel tuo caso viene fatta una
redirezione automatica verso lo standard output del processo chiamante.
Se in precedenza avevi rediretto il file descriptor 1 (standard output)
sul file pluto.tmp avrai l'output su file.
Ciao.
-- 
     (ZZZ)       Filippo Salotti, Bagni di Lucca, Lucca, Italy.
    //   \\  _                 E-mail : 
fil...@humnet.unipi.it
   /Y\    ZD<_o===============================================o
 .oZZZZZo.     | Studente Ingegneria Informatica Automatica  |
<OXXXXXXXO>    | Dip. Sistemi Elettrici Universita' di Pisa. |
Newsgroup: it.comp.lang.c
Titolo: AIUTO: piccolo problema da voi risolvibile, credo

Il mio grande problema e' questo esercizione: 
In un cinema Multisala:
Un valore di tipo Prenotazione è un record di due campi. Il primo
campo rappresenta la sala in cui viene proiettato il film che si
intende vedere (A,B, C o D);il secondo campo CF, di tipo char *, serve
a contenere il codice fiscale del richiedente. In ogni sala sono
disponibili solo un numero fissato di posti, determinato dall’array
costante CAPIENZA, ed il numero di prenotazioni accettate per quella
sala è memorizzato nella variabile globale prenotazioni.
Un potenziale spettatore entra nella biglietteria del Cinema
Multisala, compila la sua prenotazione e si mette in fila ad uno
sportello ad aspettare il suo turno. Di fronte ad ogni sportello della
biglietteria, ci sarà dunque una lista di prenotazioni che aspettano
di essere evase: un valore di tipo Sportello è una lista semplice di
prenotazioni in attesa.
Questo e' il codice di partenza:
typedef enum Sala { A, B, C, D } Sala;
const int CAPIENZA [ ] = { 50, 70, 100, 30 };
int prenotazioni [ ] = { 0, 0, 0, 0 };
typedef struct {
	Sala sala;
	char * CF;
	} Prenotazione;
typedef struct Sportello {
	Prenotazione prenotazione;
	struct Sportello * next;
	} Sportello;
ESERCIZIO 1
Implementare le seguenti procedure:
void MettiInCoda (Sportello ** sportello, Prenotazione prenotazione);
che aggiunge alla fine della fila sportello * l’elemento prenotazione;
void Stampa (Sportello * sportello);
che fornisce a video una rappresentazione dello stato della lista
sportello passato come parametro attuale.
ESERCIZIO 2 Implementare la seguente funzione:
int EvadiPrenotazione (Sportello ** sportello);
che accetta la prima prenotazione nella fila sportello * e la toglie
quinDI dalla lista. La funzione restituisce 0 se questo non risulta
possibile in quanto non sono più disponibili posti in quella sala,
altrimenti restituisce 1 e aggiorna la disponibilità dei posti nella
sala prescelta.
La funzione deve liberare (mediante il comando free) la memoria
relativa all’elemento di tipo Prenotazione che viene tolto dalla
lista.
ESERCIZIO 3 Implementare la seguente procedura:
void ChiudiSportello (Sportello ** restaAperto, Sportello **siChiude);
che chiude lo sportello siChiude mettendo la fila corrispondente in
coda allo sportello restaAperto.
Vi prego datemi una mano. E se non vi chiedo troppo potete scrivere il
codice utilizzando gli lementi forniti, in modo che io possa poi
capire cosa avete fatto? Grazie mille.
Grazie ancora a tutti.
PZ
--
:-P
PZ "I'm a slave for you" & "Overprotected"

 coda allo sportello restaAperto.
Se  *siChiude ==  NULL non  fai nulla,  se *restaAperto  == NULL  allora
*restaAperto = *siChiude. Altrimenti scorri  *restaAperto fino alla fine
a ci attacchi in coda *siChiude:
Sportello *tmp = *restaAperto;
while(tmp->next)
	tmp = tmp->next;
tmp->next = *siChiude;
Gli esercizi sono  semplici, probabilmente non ti e`  chiaro l'uso delle
liste. Sul libro che usi ci sara` sicuramente qualcosa.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se non puoi convincerli, confondili.
Newsgroup: it.comp.lang.c
Titolo: puntatore a funzione?

Potreste spiegarmi come passare un puntatore ad una funzione? Grazie

 Potreste spiegarmi come passare un puntatore ad una funzione? Grazie
Forse vuoi dire un indirizzo(di una variabile, struttura o quello che sia)
ad una funzione...
#include<stdio.h>
int* Ptrfunc(int *ptr); //prototipo di Ptrfunc
int main(void)
{
int a = 5;
int* r;
printf("a vale %d\n\n",a);
r = Ptrfunc(&a);
printf("ora vale %d\n\n", *r);
return 0;
}
int* Ptrfunc(int *ptr) //definizione Ptrfunc
{
*ptr = 3;
return(ptr);
}
------------------------
praticamente nel prototipo metti come parametro di ingresso  tipo*  var
e poi quando vuoi passare l' indirizzo di una variabile(ad esempio) alla
funzione gli passi l' indirizzo della variabile con l' operatore &.
spero di esserti stato di aiuto... ciao
;-)

Potreste spiegarmi come passare un puntatore ad una funzione? Grazie
Intendi 
   (un) (puntatore ad una funzione)
oppure
   (un puntatore) (ad una funzione)
?
Nel primo caso un esempio semplice e' ...
  #include <stdio.h>
  void foo(void)
  {
    printf("foo()\n");
  }
  void bar(void)
  {
    printf("bar()\n");
  }
  void chiama_10_volte(void (*f)(void))
  {
    int i=0;
    while(i++ < 10)
      f();
  }
  int main(void)
  {
    chiama_10_volte(foo);
    chiama_10_volte(bar);
    return 0;
  }
nel secondo caso invece ...
  #include <stdio.h>
 
  void inc(int *x)
  {
    (*x)++;
  }
  int main(void)
  {
    int a = 65;
    inc(&a);
    printf("a = %i\n",a);
    return 0;
  }
HTH
Andrea

Grazie!

Grazie a tutti e due, site stati chiarissimi!
Newsgroup: it.comp.lang.c
Titolo: scrittura protocollo

Ciao a tutti,
vorrei un vostro parere sull'utilizzo nel mio bel programmino delle
funzioni ntohl, htonl e simili.
Vorrei scrivere codice piu` portabile possibile, queste funzioni fanno
parte dello standard oppure no? facendo il man da linux mi dice:
#include <netinet/in.h>
mi viene da pensare che non ne facciano parte!
Quali alternative ho per scrivere un protocollo portabile che segua lo
standard???
Spero di non essere fuori tema.
Ciao e grazie, Simone.

Spero di non essere fuori tema.
Non fanno parte dello standard "C". Ma se devi scrivere qualcosa
che parli usando socket comunque non puoi farlo con il solo
standard "C". Quello che capita di solito e' che ci sono
#ifdef specifiche per i vari sistemi che includono i file
necessari e che sistemano le piccole incongruenze.
Se invece ti interessa semplicemente scrivere/leggere interi
indipendentemente dal fatto di essere su un sistema big o
little endian puoi usare una scrittura esplicita byte-a-byte
del tipo:
  int WriteInt(FILE *f,uint32 x)
  {
    unsigned char rep[4];
    rep[0] =   x     & 255;
    rep[1] = (x>>8)  & 255;
    rep[2] = (x>>16) & 255;
    rep[3] = (x>>24) & 255;
    return fwrite(rep,1,4,f)==4;
  }
  int ReadInt(FILE *f,uint32 *res)
  {
    unsigned char rep[4];
    if (fread(rep,1,4,f)==4)
    {
      res = ((uint32)rep[0])       |
            ((uint32)rep[1] << 8)  |
            ((uint32)rep[2] << 16) |
            ((uint32)rep[3] << 24);
      return 1;
    }
    /* else */
    return 0;
  }
Nota che in questo caso ho assunto che i char
siano di 8 bit (cosa molto comune) e che tu abbia
definito un opportuno typedef per interi unsigned
a 32 bit che sia portabile sulle piattaforme che
ti interessano.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff
Newsgroup: it.comp.lang.c
Titolo: Nome della macchina Host

to programmando un progetto per un esame, e devo trovare il modo di sapere , all'interno del mio 
programma, il nome del server su cui sta girando il mio programma.
Ho provato a usare l'istruzione GETHOSTENT che ritorna una struttura dati contenente le informazioni sulla 
macchina locale ma non riesco a utilizzarle.
struct hostent {
               char    *h_name;
               char    **h_aliases;
               int     h_addrtype;
               int     h_length;
               char    **h_addr_list;
           };
char *myhost;
struct hostent *hentry;
.
.
hentry=gethostent();
myhost=hentry->h_name;
Mi da un erroe di segmentation error e non so come risolverlo.
Qualcuno ha gia avuto un erroe simile? Come si risolve?
Grazie Valerio
P.S. Rispondetemi in mail, Grazie

 wrote in message
news:85kmrp$sio$1...@pluto.sm.dsi.unimi.it...


Qualcuno ha gia avuto un erroe simile? Come si risolve?
Si risolve ALLOCANDO memoria per la struttura hostent prima di richiamare 
la funzione, e visto che non lo hai fatto per la struct, alloca spazio 
anche per "myhost".
struct sfogo {
Scusa non ce l'ho con te in particolare ma con quelli che, deviati dai vari 
c++ et similia, danno su questo gruppo risposte strampalate sull'utilizzo 
dei puntatori in _C_ (!!ripeto in ____C______, scusate ma non ne posso + di 
vedere scritto che ci pensa il sistema operativo a allocare memoria 
"dinamicamente" e che quindi char *c="pluto"; funziona ma dico io IN QUALE 
FAVOLA, e per favore non mi venite a dire che vi ha funzionato _sempre_ 
xche' prima o poi il vostro bel prog. e' schiantato, a proposito provateci 
in un qualunque SO che non sia WinDOS e poi ne parliamo vi beccate un bel 
Segmentation fault in faccia!!)
}
OK scusa lo sfogo ma NON ne posso + di vedere il buon vecchio C bestemmiato 
in questo modo.

struct sfogo {


 FAVOLA,
Scusa, ma chi ha mai scritto cose del genere? Non mi sembra di averle
lette mai qui. Comunque le stringhe costanti vengono si allocate dal
sistema operativo ma staticamente, non dinamicamente.
EMG

 Mi da un erroe di segmentation error e non so come risolverlo.
Se sei sotto Linux, e questo è tutto quello che hai scritto, devi 
guardare meglio la documentazione: gethostent() non si usa così.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)


Condivido lo sfogo ma non l'esempio che fai: char *c="pluto"; FUNZIONA!
il suo significato e' che dichiari un puntatore a alla stringa "pluto". Le
stringhe
vengono memorizzate in un segmento "STRING" definito come costante (ROM).
Sono daccordo nel dire che in questo modo NON ALLOCHI MEMORIA e non
puoi usare *c metterci quello che vuoi
Senza rancore
Stefano
Newsgroup: it.comp.lang.c
Titolo: FAQ 8 - compilare un progetto costituito da più sorgenti

Ciao a tutti, mentre il dibattito sullle domande di ieri prosegue
proficuamente, io posto anche qualcosa di nuovo.
Siccome dell'argomento in oggetto ho poche nozioni e pochi vecchi messaggi,
prima di dire delle boiate (come quella che sprintf è in stdlib.h ;-))
lascio a voi l'onore di svilupparlo! Mi limito a dire che dovrebbe contenere
i seguenti punti:
- come interconnettere i file a livello di sorgente (tipo dichiarazioni
extern e roba varia)
- come e perchè creare dei file header, cosa metterci dentro
- come operare la compilazione separata e il linkaggio (qui vorrei che
ognuno spiegasse come fa con la sua piattaforma, così da avere più
informazioni possibili su ciò che non è standard)
Grazie e buon lavoro.
PS. Se volete cominciare a dare un'occhiata alla bozza del sito, l'ho messo
(in attesa di una versione definitiva da spedire a Marco Abis) sul mio
spazio web all'indirizzo:
http://digilander.iol.it/shiny77/index.htm
Marco Coppo
University Of Sheffield

 informazioni possibili su ciň che non č standard)
La compilazione separata si fa semplicemente ripetendo la compilazione
singola per ogni modulo. Poi si procede, spesso automaticamente, alla
fase di linking, magari utilizzando uno strumento come il make
disponibile per la maggior parte dei compilatori.
EMG
Newsgroup: it.comp.lang.c
Titolo: sono un principiante

Ciao,
sto studiano il C da 10 giorni. Ho fatto il seguente programmino, ma non
riesco a fargli scegliere fra Ciao e Salve, nel senso che quando lo
lancio mi scrive sempre Ciao!
Dove ho sbagliato?
Grazie:)
#include <stdio.h>
void main () {
 int nI=1;
 if (nI==1){
  printf("ciao!");
 }
 else  {
  printf ("salve");
 }
 scanf ("%d\n", nI);
}
--
Posted from 
dns.onenet.it
 [195.31.200.99] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

void main () {
Lo standard dice che la funzione main deve essere di tipo int e
quindi: int main(void)
ciao

 Dove ho sbagliato?
A parte che main dovrebbe essere dichiarata int, questo programma non potrà
mai stampare salve perchè tu controlli il valore di In prima di averlo
immesso da tastiera per cui il controllo viene fatto sul valore di
inizializzazione - 1 nel tuo caso - e quindi viene sempre fuori "ciao". Se
ci fai caso, prima ti stampa ciao e poi ti chiede il numero.
ciao ciao
Marco
--
Marco Coppo
University Of Sheffield
FAQ di it.comp.lang.c:
http://www.programmazione.it/linguaggi/c/itcomplangc.htm

 via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Ciao, Andrea
-- 
------------------------------------
arimicci @@ aritaly. com  .~~~.  ))
                (\__/)  .'     )  ))
  Andrea        /o o  \/     .~
      Rimicci  {o_,    \    {
                 / ,  , )    \     .
 * Developer *   `~  '-' \    } ))
C C++ cgi miva  _(    (   )_.'
Java           '---..{____}
OS/2 Warp Server for Ebusiness admin
--------- OS/2 V5 "Phoenix" --------

Ringrazio tutti per le preziose informazioni. Sulla strada della perdizione?
Ebbene si:) Spero di poter contare ancora sul vostro aiuto.
Grazie e ciao:)))

Newsgroup: it.comp.lang.c
Titolo: [AIUTO] DOVE SBAGLIO???

Ciao a tutti. Sono un principiante e volendo esercitarmi con le funzioni, ho
voluto creare un programma per la conversione gradi Fahrenheit--->Celsius.
Solo che qualsiasi valore immesso dà come risultato 17.78. Perchè???? Ecco
il codice (è piccolo , tranquilli!)
#include <stdio.h>
float conv(float x); /* Prototipo della funzione per la conversione */
int main()
{
   float fahr;
while(1)
  {
 puts("\tInserisci un valore in gradi Celsius o premi CTRL-C per uscire\n");
 printf("\t\t °F = ");
 scanf(" %.2f ",&fahr); /* Viene immesso il valore da convertire */
 printf("\n\tIl valore corrispondente in gradi CELSIUS è:   %.2f
°C\n\n",conv(fahr));
 return 0;
   }
}
float conv(float x)
{
      float celsius=0;
      celsius= 5*(x-32)/9; /* Espressione per la conversione */
      return celsius;
}
Grazie per avermi aiutato!!! :)

 }
[1]
<code>
	int
	main(void)
	{
		char buf[80];
		float fahr;
 
		printf("Inserisci il valore: ");
		fflush(stdout);	
		while(fgets(buf,80,stdin)) {
			fahr=strtodf(buf,(char **)NULL);
			printf("Il valore in Celsius e`: %.2f\n",
				conv(fahr));
			printf("Inserisci il valore: ");
			fflush(stdout);
		}
 
		return 0;
	}
</code>
--
Alla prossima,
Marco

>             fahr=strtodf(buf,(char **)NULL);
                    ^^^^^^^
                    strtof
 
-- 
Alla prossima,
Marco
 

                    strtof
Ne ho imparata una nuova. Io conoscevo solo strtod (e pensavo
che la 'f' fosse scappata per questioni di contiguita' sulla
tastiera) ma dopo qualche indagine mi sembra di aver capito
che il C99 ha introdotto anche strtof. La domanda pero' e':
quanti sono i compilatori C che la supportano ?
Piu' curioso e' il cast di NULL in una funzione che non accetta
un numero variabile di argomenti. C'e' qualche motivo particolare
per questa scelta che trovo strana ?
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff
Newsgroup: it.comp.lang.c
Titolo: [forse ot]c c++ win32.....Gui

Ciao,
volevo chiedervi un chiarimento;
volevo iniziare a programmare qualcosina con interfaccia grafica. Uso il c 
per piccoli progetti, diciamo utilita' personali e vorrei aggiungere una 
interfaccia grafica.
Vorrei sapere se il linguaggio procedurale (c in questo caso) e' adatto alla 
costruzione di interfacce grafiche o e' più indicato un linguaggio ad 
oggetti come in c++.


Ti rispondo nel più classico e banale dei modi: dipende.
In C (usando le API di Win) si possono raggiungere notevoli risultati in 
termini di velocità, efficenza e anche complessità dell'interfaccia. Lo 
scotto di tutto questo è che devi scriverti tonnellate di righe di 
codice, tuttavia sai abbastanza bene cosa stai facendo (sul fatto di 
sapere il perché, dipende da te).
L'approccio con API ti permette, tra l'altro, di capire bene come 
funziona il giro del fumo degli eventi che risvegliano il programma e 
sfruttarlo in mille modi differenti per avere dei programmi leggeri e 
veloci. (altra nota: se non utilizzi oggetti COM, ActiveX e altre 
schifezze simili, il programma che ne risulta non necessita di procedure 
di installazione e disinstallazione)
L'approccio ad oggetti, ha come scopo quello di "mascherare" le API in 
una gerarchia di oggetti i quali presentano una curva di apprendimento 
più rapida rispetto all'approccio con le API e più semplice dal punto di 
vista logico, in quanto perdi di vista quelli che sono i segnali del SO 
al programma, ma maneggi solamente funzioni di callback che vengono 
invocate dal sistema ad oggetti.
L'approccio ad oggetti è più semplice e compatto (almeno nell intenzioni 
di chi scrive il sistema di oggetti).
I sistemi ad oggetti disponibili sono diversi, da MFC (*solamente* 
sistemi Windows), wxWidgets (Open source e cross platform), GTK, QT, ecc...
Quale usare di queste? Io non so consigliarti, posso solamente 
consigliarti di non imparare cose che hanno significato solo per sistemi 
Windows, se vuoi mantenerti la possibilità di passare ad altri sistemi.
Sotto Win, io ho lavorato molto con le API.
Con MFC mi sono trovato veramente male. A momenti ti obbliga a scrivere 
più righe di codice di quelle necessarie per fare la stessa operazione 
con le API e personalmente le ho trovate pesanti sia in termini di 
memoria che in termini di velocità.
Sto studiando, adesso, le wxWidgets in quanto lavoro molto con Linux e 
sinceramente mi girano un po' gli zebedei a dovermi imparare n-mila 
sistemi differenti. wxWiddgets, GTK, e QT, sono indipendenti dal sistema 
operativo, quindi imparate una volta, il resto è tutto in discesa.
PSK

 Ti rispondo nel più classico e banale dei modi: dipende.
Grazie per la risposta, molto interessante dato che temevo che fosse ormai 
sconsigliato e limitativo l'utilizzo del c rispetto al c++.
Per fare domande in merito alle questioni relative alle api di windows devo 
chiedere su *.win32?
In ogni caso, sei stato molto chiaro nel fornire la tua esperienza.

 
Sě. it.comp.programmare.win32
Lě puoi chiedere info anche su MFC e tutto ciň che concerne la 
programmazione di ambiente Win.
LP
Newsgroup: it.comp.lang.c
Titolo: lettura di un carattere da tastiera

Qualche settimana fa avevo letto un messaggio in cui si menzionava la
funzione kbhit() della conio.h e che ha dato seguito a vari messaggi di
censura... mi guarderň bene dal fare domande in proposito.
Il problema č questo: sotto linux, di cui non si ha traccia
dell'innominabile libreria, come posso fare un polling non bloccante sullo
stdin?
Avevo pensato di andare a leggere direttamente nella struttura FILE ma
voglio sperare che esista una soluzione piů "pulita".
ciao e grazie in anticipo.


I'm not prejudiced, I hate everyone equally.

Newsgroup: it.comp.lang.c
Titolo: Come si fanno gli screen saver?





Ciao, vorrei sapere cosa bisogna fare per creare 
uno screen saver partendo da un file C. Non so, devo includere librerie 
particolari e compilarlo in un certo modo.


 


Grazie, Tanilo



compilarlo in un certo modo.
Beh, dipende dal sistema operativo... se è per windows e non hai il
visual c (nel cd ci sono degli screen saver molto semplici che
potranno servirti da scheletro per la costruzione di uno tuo
personalizzato) potresti guardare in qualche sdk microsoft...
comunque se vai in it.comp.programmare.win32 ti sapranno aiutare di
sicuro...
se invece è per linux o mac non saprei cosa dirti...  
ciao
santo giuseppe
Newsgroup: it.comp.lang.c
Titolo: ESERCIZI DEL K&R

Ciao a tutti. Volevo chiedervi: è normale che, almeno alla prima lettura,
riesco a risolvere 1 esercizio su 15 fra quelli proposti dal K&R? Mi
consigliereste di comprare il libro delle soluzioni degli esercizi del K&R,
ovvero "Linguaggio C, il libro delle soluzioni" di Tondo-Gimpel?
Grazie per l'eventuale risposta.
Ciao

 IO MANCO QUELLO RIESCO A RISOLVERE

Newsgroup: it.comp.lang.c
Titolo: grafica spartana

In pascal avevo una funzione per posizionare le stringhe rispetto allo
schema delle 80 colonne 24 righe (locate(1 riga , 4 colonna)
print("ciao").........in C utilizzando SOLO la libreria standard esiste
qualcosa di simile?, e per i colori?
tnx

 wrote in message
9042r9$c9g$1...@lacerta.tiscalinet.it...


> ad esempio nel Borland C c'č conio.h che contiene gotoxy, clrscr,
La libreria conio esiste anche per DJGPP

Newsgroup: it.comp.lang.c
Titolo: AIUTO!!

Volevo sapere quale e' il max indice degli array.
Grazie.

Grazie.
Prego. Magari per risposte piu' appropriate prova a specificare qualcosina
in piu'....
-- 
Warning!
Don't send any mail for me at my from: or replayto: addresses ;
I just kill the mail over there without reading!

Grazie.
Credo dipenda dal compilatore o altro.
Prova a fare un ciclo che si blocca quando l'indice sballa e un
contatore.
Saprai cosi' dove puoi arrivare.
Spero di aver capito la domanda e di essere stato chiaro.
Bye !
뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞
Francesco Balduini                     
baldus                                 
bald...@tin.it
(la mia e-mail cambiera',
vi sara' comunicata
quella definitiva)  
뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞
http://space.tin.it/musica/cbalduin
(la soluzione di Monkey3,
come costruire un volante 
con meno di 40000,
Micromachines2, Ignition
e Motoracer records)   
뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞뇞

 in piu'....
Tieniti le tue risposte di m___a per te!!!!!!!!!!


 Credo dipenda dal compilatore o altro.
Dipende dalla rappresenazione dei numeri nella macchina che si sta
usando, credo che in assoluto il max_indice sia uguale al massimo
numero int, (sempre che non ci siano limitazioni in fatto di spazio)
-- 
Saluti.
*NATHAN*
Newsgroup: it.comp.lang.c
Titolo: problema con feof

Salve a tutti,
provo a spiegarvi il mio problema: devo leggere un file binario all'interno
del quale ci sono dei dati in formato double e poi scrivere gli stessi dati
in un file di testo. Ho provato a fare cosě:
<code>
#include <stdio.h>
int main()
  FILE *FileInput, *FileOut;
  double Values;
  FileInput=fopen("data.dat","rb");
  FileOut  =fopen("out.txt","w");
  while( !feof(FileInput) ) {
     fread(&Values,sizeof(double),1,FileInput);
     fprintf(FileOut,"\n %2.7f", Values);
  }
   fclose(FileInput);
   fclose(FileOut);
   return 0;
}
</code>
In questa maniera perň mi ritrovo che l'ultimo dato letto mi viene scritto
sul file d'uscita due volte; in pratica c'č un'iterazione di troppo del
ciclo while, non viene perň letto alcun nuovo valore (perchč non ce ne sono)
e l'ultimo valore che aveva la variabile Values viene scritto. Ho risolto
sapendo il numero di dati che devo leggere, aggiungendo quindi questa
condizione al while:
<code>
[...]
while( !feof(FileInput) && cont<nElements ) {
     n=fread(&Values,sizeof(double),1,FileInput);
     fprintf(FileOut,"\n %2.7f", Values);
    cont+=n;
  }
[...]
</code>
In questa maniera mi funziona e non ho problemi perchč il programma conosce
il numero di elementi da leggere, ma sarei curioso di capire perchč
nell'altra maniera non funzionava a dovere, e per ora non sono riuscito a
capirlo.
Grazie!
--
Ciao, Gianandrea

  }
while ( fread( ... ) ) ;

   }
fai come ha scritto La Forgia ma, se proprio vuoi usare feof (), prova a
fare cosi' .....
while (1) {
fread (&Values, sizeof (double), FileInput);
if (!feof(FileInput))
	fprintf (FileOut, "\n %2.7f", Values;
else
	break;	}
praticamente prima di leggere oltre l'ultimo double, feof() non trova
la fine del file, ma quando fai l'ultimo fread (visto che non controlli
nemmeno se la lettura e' andata a buon fine) il programma va avanti
anche se non legge niente e,
visto che non ti scrive niente in Values, ti riscrive il vecchio valore 
ciao ciao
-- 
Antonio barbone ......
Outside of a dog, a book is man's best friend.
Inside of a dog, it's too dark to read.
		-- Groucho Marx

Grazie a tutti!
--
Ciao, Gianandrea
Newsgroup: it.comp.lang.c
Titolo: Funzione con numero arbitrario di parametri

Salve a tutto l'NG.
In un mio progetto ho scritto una funzione do_log(char *lptStr) che
scrive in un file di testo la stringa passata.
Se però volessi passare gli argomenti come con una fprintf(), come
potrei fare?
Cioè al momento la funzione la richiamo come do_log("create_client() -
Memoria allocata"), ma se volessi poter fare una cosa simile a:
 do_log("create_client() - Memoria allocata al client n. %i",
iClient);
come dovrei sviluppare la do_log()?
Thx in anticipo a tutti ;)

Darkbyte [Google] wrote:

Richiamando al suo interno la funzione vfprintf() od una delle 
funzioni equivalenti per scrivere a schermo, buffer o file.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 Giovanni
Ciao
Darkbyte

 E come le passo alla vfprintf o simili?
io andrei a ravanare nel source code della printf().
Ciao Jack

 E come le passo alla vfprintf o simili?
http://c-faq.com/varargs/index.html
Ciao.

 E come le passo alla vfprintf o simili?
Qualcosa del genere:
void mywrite(const char *msg, ...) {
      va_list valist;
      va_start(valist, msg);
      char buffer[1024];
      vsprintf(buffer,msg,valist); /* attenzione al buffer overflow*/
      va_end(valist);
      /* ... */
}
E.

 void do_log(char *lptStr)
#include <stdarg.h>
void do_log(const char *lptStr,...)
{
   va_list args;
   int len;
   FILE *file = fopen("FileDiLog", "a");
   va_start(args, lptStr);
   len = vfprintf(file, lptStr, args);
   va_end(ap);
   fclose(file);
   return;
}
Devi studiarti l'uso delle macro va_start(), va_arg() e va_end() 
definite in <stdarg.h>.


Ok grazie a tutti, era quello che mi mancava. Proverò appena torno a
casa.
P.S.: ?manu parlava di un possibile buffer overflow, ma cosa intende?
La funzione la userò solo io, all'interno di un mio progetto. Devo
metter su un file di log per analizzare eventuali funzionamenti
anomali del programma. Si parlava di un buffer overflow malizioso in
caso di uso della funzione da parte di terzi?

confermo, devi inserire la libreria stdarg.h
es:
funzione(int a,...) {
// una funzione che ha un parametro fisso e altri non noti ( nessuno
ti vieta di farli tutti non noti)
all'interno della funzione devi dichiarare una variabile (es:
arg_ptr)  del tipo va_list   e inizializzarla con va_start() --> va
start non fa nulla che far puntare arg_ptr alla variabile
supplementare dopo l'ultima variabile fissa ( nell'esempio "a").
Richiamando va_arg()  e passsandole il puntatore arg_ptr  estrarrai
l'argomento
prima di uscire devi usare va_end()
}
Spero di essere stato un po' chiaro il sono incombe..

 caso di uso della funzione da parte di terzi?
manu si riferiva all'uso della funzione vsprintf che non specificando
il limite di byte da scrivere
potrebbe causare un possibile buffer overflow.Evita il suo utilizzo, e
sostituiscila con vsnprintf.
Terzi o non terzi, e' una funzione che ha provocato in passato
parecchi bug :)
Salut.
Newsgroup: it.comp.lang.c
Titolo: Aiuto floating point

Ciao non mi ricordo come fare stampare il numero di cifre dopo la virgola di
un float , qualcuno me lo può ricordare ?
ciao .
Es.
float a=12.12300000;
printf("%f ",a);
stampa 12.12300000
Come devo fare per far stampare 12.123?

: float a=12.12300000;
: printf("%f ",a);
: stampa 12.12300000
: Come devo fare per far stampare 12.123?
printf ("%.3f", a);
--
____ __         __,_      __  _____
\  _\_ \  ___ _/ / /\  /\/  \/ / _/ It is better to reign in Hell
 \  _ \ \/ _ '/ , |\ VV / / / / _/ Than serve in Heaven.- MILTON
  \_,_/\_\_,_/_/|_| \__/\__/_/_/
      -- the one and only --     e-mail : 
blak...@tiscalinet.it
                                ICQ    : 59394345
The UNIX Guru's View of Sex:
$unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

 Come devo fare per far stampare 12.123?
Mi sembra sia
printf("%.3f ",a);
EMG
Newsgroup: it.comp.lang.c
Titolo: domanda semplice

dunque, dichiaro una stringa s:
	char s[10];
successivamente, nel corso del programma, voglio assegnare ad s una
stringa cosě:
	s = "ciao";
perň mi da errore. come si fa?
ciao e grazie xl'attenzione

però mi da errore. come si fa?
cioè voglio dire, è ovvio che mi da errore, xché s è un puntatore, ma
non c'è un modo semplice per fare qualcosa di di simile?

non c'è un modo semplice per fare qualcosa di di simile?
l'unico modo è strcpy
se no devi usare un char* (con tutte le conseguenze del caso)
Flavio Moretto
flamor@[viaquesto]
qzerty.it
 
icq 122395780 (pat)
- internet  + cabernet

"sprinkieball" <ask...@x.com.invalid> ha scritto nel messaggio
news:4hvudu08ao6pqrbss...@4ax.com...

No, s non è un puntatore: gli array di char possono o essere inizializzati
oppure modificati nel contenuto, usando un ciclo oppure strcpy. Puoi fare
quindi una delle seguenti cose:
char s[10] = "ciao";
che dichiara un array di char di 10 elementi e lo inizializza con la stringa
"ciao", mettendo anche il '\0' terminatore: è equivalente a fare
char s[10] = {'c', 'i', 'a', 'o', '\0' };
Oppure puoi usare strcpy:
char s[10];
strcpy(s, "ciao");
Ciao,
Cecco

strcpy(s, "ciao");
ok grazie!

non è il puntatore al primo elemento del vettore??
"s" ora come ora e' il vettore stesso, pero' potrebbe decadere da
vettore a puntatore al primo elemento (per esempio se lo passassi a
una funzione).
Per fare un test prova a fare sizeof(s): vedrai che ti ritorna lo
spazio in byte di tutto l'array, cosa che non potresti fare se fossero
un puntatore.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

strcpy(s, "ciao");
io usavo sempre sprintf(s,"ciao")
giusto x la cronaca.. non cambia nulla no?
anzi , in piu ti ritorna la lunghezza.. cosa vuoi di piu? (sbaglio?)



Mi associo... ho sempre usato sprintf e mi trovo
benissimo :)
--------------------------------
Inviato via 
http://usenet.iol.it
 

 strcpy(s, "ciao");
In genere e` meglio usare strncpy(), che ti permette sempre di controllare
la quantita` di caratteri da copiare, cosi` non rischi di "sforare" oltre
il limite dell'array.
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscali.it

 ha scribite:

Non sbagli, ma in questo modo devi limitarti a stringhe che non
contengano '%', altrimenti...
-- 
Saluti,
    Mardy
http://castellina.org/interlingua

strcpy(s, "ciao");
Puoi anche usare memcpy, se la stringa non termina con '\0', o prevede piů
'\0' nel corpo.
Newsgroup: it.comp.lang.c
Titolo: Come mai questa cosa su gcc/mingw compila???

mettiamo che io voglia dichiarare una matrice di dimensioni non conosciute
in compile-time:
void main() {
    int righe, colonne;
    scanf("%d", &righe);
    scanf("%d", &colonne);
    {
        int matrice[righe][colonne];
        matrice[0][0] = 0;  /* questa riga in runtime funziona! */
    }
}
ebbene: questa schifezza che ho scritto, sul gcc/mingw compila
perfettamente, a parte un piccolo warning che viene restituito quando uso
l'opzione pedantic che mi dice che quello non č ANSI C (e grazie al...);
ora io vorrei sapere in che modo viene implementata quella schifezza dal
compilatore: dove viene allocata la matrice? nell'heap? nello stack? spero
non si tratti della seconda...
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 compilatore: dove viene allocata la matrice? nell'heap? nello stack? 
Stack.
Max

 non si tratti della seconda...
Certo che si tratta dello stack! Altrimenti che senso avrebbe?
Se fosse sullo heap, il compilatore dovrebbe chiamare implicitamente una
malloc() al momento della dichiarazione e poi una free() quando la variabile
va fuori scope: una complicazione tremenda, senza contare l'inefficienza
della cosa.
Implementandolo sullo stack, invece, al compilatore basta creare una
variabile nascosta di tipo size_t per tenere il numero di colonne della
matrice, in modo da poter eseguire correttamente l'aritmetica dei puntatori.
La deallocazione della variabile ha costo praticamente zero, come per tutte
le altre variabili locali.
--
Cingar
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Se vuoi usare costrutti del c99 non presenti nel c89, con gcc devi dare 
l'  opzione  -std=c99. Vedrai che dopo gcc non avra' nulla da dire sulla 
tua "schifezza" :-). Neanche con -pedantic -Wall.
Giorgio

[...] 
son sempre le stesse domande che si ripresentano.. ma leggere i vecchi 
thread?
-- 
sbi
Newsgroup: it.comp.lang.c
Titolo: vettore[640][480] Array size too large

ciao a tutti!
avrei bisogno di risolvere un problema...
devo creare un array di 640*480 ma ho un errore "array size too large".
come posso risolvere il problema? è già da tempo che ci provo ma senza 
risultati :((
come ambiente di sviluppo uso il turbo c.
ciao e grazie

 ha scritto nel messaggio
news:3E4A8020...@tin.it...

invece di dichiarare un int[640][480] dichiari un int**, array di puntatori,
e poi lo allochi, riga per riga, con la malloc
<code>
int **video;
video = malloc( sizeof(int*) * 640 );
for( i = 0; i < 640 ; ++i ) {
    video[i] = malloc ( sizeof(int) * 480 );
}
</code>
ciao,
Nids
ps: ovviamente al posto di int ci metti un po' quel che ti pare

 wrote:
640 x 480 = 307200 elementi ...
molto propabilmente sta usando un compilatore per ms dos
a 16 bit.. ricordo quel msg sul tc della borland...
essendo a 16 bit il max array disponibile in modalità reale
poteva al + contenere 65536 elementi char .. altrimenti
(1024 * 64 ) / sizeof(type) elementi continui.. non + di tanto

e poi lo allochi, riga per riga, con la malloc
Suggerisco anche  di  controllare  il  modello  di  memoria  che  hai
impostato nel Linker
Bye
GIGI
-- 
   THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
visit my home page:
http://web.tiscali.it/KilometroZero

Newsgroup: it.comp.lang.c
Titolo: Help, porta seriale

Ciao, sto cercando il modo per controllare la porta seriale in C ma non so
come fare.
Spero che qualcuno possa aiutarmi.
Michele

come fare.
Premessa: il risultato non e' portabile (dipendera' dal s.o./compilatore
che userai).
Guarda su 
www.beyondlogic.org
 nella sezione su RS232.
Ciao, Obelix
Newsgroup: it.comp.lang.c
Titolo: sulle label

salve,
ho un problema stupido, premetto che sono un neofita, il mio problema
riguarda il goto:
io ho creato una label
fine: return 0;
tale che se è verificata una condizione
if ((riga1 == 0)||(colonna1 == 0)) goto fine;
termina l'esecuzione del programma.
il mio compilatore mi dice
" label `fine' used before containing binding contour"
che significa?dove sbaglio?
grazie.
ps è sbagliato immettere nel programma più "return 0;" cioè è scorretto
sostituire quel "goto fine;" con "return 0;" (in questo modo metto nel
programma più punti di uscita)
grazie ancora
----------------------------------------------------------------------------
----------------------------------------------------------------
"Evidentemente Euclide non dava molta importanza agli aspetti pratici della
sua disciplina: infatti si racconta che, quando un allievo gli chiese che
utilità avesse lo studio della geometria, Euclide si rivolse al suo schiavo
dicendogli di dare all'allievo una monetina << perchè ha bisogno di trarre
guadagno da ciò che impara>>"


sbagli ad usare il goto :) ti impaleranno per questo 

 programma piů punti di uscita)
Non solo non e' sbagliato, ma e' preferibile all'uso del goto. Tieni
conto pero' che in molti casi il codice risulta strutturato in modo piu'
pulito se eviti di usare uscite multiple.
Ciao,
Nicola
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 che significa?dove sbaglio?
Non sono un fan del goto. Ma se spedisci un po' di codice l'errore
si trova.
Se poi vuoi tenerti tutto per te confidando sulle doti di veggenza del
NG... :-)
C:\>iao Angelo
P.S. Non e' che stai tentando di uscire dallo scope delle funzione con
     il goto, per caso?


 pulito se eviti di usare uscite multiple.
Beh, c'e' almeno un caso in cui il goto non e' deprecato: per uscire da N 
cicli annidati, per cui puo' diventare troppo complesso o troppo costoso 
farlo con delle semplici condizioni.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 farlo con delle semplici condizioni.
Anche se una simile situazione dovrebbe costituire un campanello
d'allarme a proposito dell'esagerata complessita' della funzione in
questione.


 pulito se eviti di usare uscite multiple.
allora come posso ovviare al problema? quale potrebbe essere un'altra valida
alternativa?
grazie
saluti

 alternativa?
Non esiste un'alternativa universale. Dipende da cosa devi fare.

Newsgroup: it.comp.lang.c
Titolo: assegnazioni e confronti su vettori

se ho 2 vettori
int vet1[2]={1,2},vet2[2];
esiste un modo per effettuare un assegnazione del tipo vet2=vet1?
e analogamente si possono fare confronti come vet1==vet2?
Cioč... vorrei sapere se sia per le assegnazioni che per i confronti bisogna
trattare i singoli elelmenti dei vettori oppure se esiste una via + breve...
Grazie

:

vet1 e vet2 non sono altro che 2 puntatori (con particolari
proprieta'). Se confronti vet1 dirrettamente con vet2 confronti solo
gli indirizzi di questi e saranno certamente diversi se sono vettori
(potrebbero essere uguali solo se almeno 1 dei 2 fosse un puntatore e
avessi effettuato tu l'assegnamento).
L'unico modo e' metterti a mano confrontare i singoli elementi nel
modo a te necessario.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

Newsgroup: it.comp.lang.c
Titolo: Aprire PDF

Salve a tutto il NG,
Io avrei la necessità di avere un codice sorgente che passatogli
un path con nome di un file PDF
lo apra con l'applicativo che nel S.O. gli è associato.
Ho già sviluppato qualcosa del genere in VB6 e funziona
tramite l'implementazione di una API di Windows,
è la seguente: ShellExecute
Sua dichiarazione:
Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Come faccio ad implementarla in C++
Grazie Marco


Uguale ... il tuo compilatore dovrebbe già fornirti l'header dove e' 
specificata la ShellExecute .. in caso contrario, aggiungi l'include 
file necessario .. per il resto, credo sia tutto uguale ... consulta
cmq l'help, dovresti trovare tutte le info che ti occorrono ..

 Come faccio ad implementarla in C++
L'argomento e' OT cisto che windows non fa parte del C standard....
Ad ogni mod, le API di windows si possono chiamare da praticamente qualunque
linguaggio... anzi e' piu' naturale chiamarle in C che non in VB. Devi
includere shellapi.h e la libreria shell32.lib dopo di che poi chiamare
ShellExecute che ha come prototipo:
HINSTANCE ShellExecute(
    HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
);
La prossima volta posta su di un NG di programmazione per windows.
Tommy

 Beh Graze ma se lo posto due volte nn credi che ho una certa urgenza!!
A me della tua urgenza francamente non interessa....  e poi ti ripeto io il
mio aiuto te lo avevo dato.
Addio.
Tommy

Newsgroup: it.comp.lang.c
Titolo: Aiuto!!!!

Salve,
ho bisogno di un debbuger efficace ma nello stesso tempo
facile da usare.
qualcuno sa dirmi qualcosa?
grazie.
--
Salvatore

 ha scritto nel messaggio
news:pIUM7.23739$BA4.8...@news1.tin.it...

Sotto gcc usa gdb che é notevole. Piů in generale puoi usare softice (costa
qualche milioncino). In questo secondo caso cercare su internet potrebbe
darti dei risultati!!!!
Newsgroup: it.comp.lang.c
Titolo: Un chiarimento...

Salve a tutto il NG. Vorrei sapere a  che serve fare l'operazione di
casting; non comprendo esattamente neanche il significato!
Saluti
Antonio

 wrote in message
WdfG7.22752$zl4.6...@news2.tin.it...


casting; non comprendo esattamente neanche il significato!
Il casting (te lo spiego in modo "rude" ) č il passaggio da un tipo di
dato ad un altro, sempre che siano compatibili. Esiste il casting
implicito (coercitivo) e quello esplicito (operato dall'utente):
Es 
int c;
float f;
f = 24.6;
c = (int) f;
^^^^^^^ č un casting esplicito ad intero
c = f;	č un casting implicito.
--
Rhymes
rhy...@myself.com
http://www.foxhound-games.it

 dato ad un altro, sempre che siano compatibili. 
putroppo non e' vero. Esiste anche la possibilita' di eseguire casting 
tra tipi di dati incompatibili; la cosa peggiore, in questo caso, e' 
che il programmatore inesperto puo' sbagliarsi e credere corretto del 
codice che invece ha comportamento indefinito; tipico esempio:
void foo(void* ptr)
{
  int n = (int)ptr;
  void* ptr2 = (void*)n;
}
Compilato su una macchina Intel-compatibile in protected mode (ovvero 
quello che usa il 98% di noi) probabilmente ptr2 conterrebbe lo stesso 
indirizzo di ptr. Ma e' una cosa assolutamente non portabile ed 
indefinita (anche perche' ci possono essere delle architetture in cui 
sizeof(void*)!=sizeof(int) ).
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

}
IMHO non ha molto senso una cosa del genere, casomai potrei capire
questo:
void foo(void* ptr) {
  int n = (int *)ptr;
  void* ptr2 = (void*)n;
}
In questo caso trovare un ambiente dove l'esempio non funziona e'
piuttosto difficile.
ciao, acc.   
a...@libero.it

 piuttosto difficile.
ne basta uno in cui sizeof(int) != sizeof(void*).


questo casting, tanto vale fare direttamente "int n = ptr".
Scusa tu, avevo dimenticato un asterisco !
void foo(void* ptr) {
    int *n = (int *)ptr;
    void* ptr2 = (void*)n;
}
ciao, acc.   
a...@libero.it

 
beh, ma in questo caso e' perfettamente valido! E' sempre possibile 
convertire un puntatore a int in void* e viceversa.

Newsgroup: it.comp.lang.c
Titolo: [LUNGO] progetto su + files, warning inaspettato

Ciao a tutti,
sto lavorando su un programma di cui ho deciso di ripartire il codice
sorgente su + files e ottengo un warning che non avevo quando il progetto
era unico. Mi sembra di aver incluso tutti gli headers necessari ma a quanto
pare mi sfugge qualcosa.
In pratica quando lancio make, gcc mi riporta un warning in cui mi dice che
tutte le volte che chiamo la funzione "openfile" (vedi codice sotto) creo un
puntatore a FILE da un puntatore a intero. Se ci metto un cast a FILE *
tutto funziona, ma non mi sembra una soluzione elegante.
Grazie a chiunque voglia aiutarmi
Marco
------
Nel programma principale ho il codice:
#include "preproc.h"
int main(int argc,char *argv[])
{
FILE *in;
...
in=openfile(filename,"r");
...
}
------------
La funzione openfile č definita nel file servfile.c dove ho il codice:
#include "preproc.h"
#include "servfile.h"
// Function OPENFILE: Opens a file and displays error message if it can't
//        open the desired file
FILE *openfile(char *filename,char *type)
   FILE *p;
    if ((p = fopen(filename,type)) == NULL)
      fprintf(stderr, "\n\nCannot open file: %s\n",filename);
    return p;
   }
------------
Nel file servfile.h ho il prototipo:
FILE *openfile(char *,char *);
mentre nel file preproc.h ho solo definizioni di costanti e strutture.
---------
Se serve, il makefile č fatto cosě:
# makefile for "preproc" utility to build and install it
CC = gcc
CFLAGS = -O
OBJECTS = \
 servfile.o   \
 clndata.o    \
        findcol.o    \
 setnet.o
all: preproc
preproc: preproc.o $(OBJECTS)
 $(CC) -o preproc preproc.o $(OBJECTS)
servfile.o: servfile.c servfile.h preproc.h
 $(CC) $(CFLAGS) -c servfile.c
clndata.o: clndata.c clndata.h preproc.h
 $(CC) $(CFLAGS) -c clndata.c
findcol.o: findcol.c findcol.h preproc.h
 $(CC) $(CFLAGS) -c findcol.c
setnet.o: setnet.c setnet.h preproc.h
 $(CC) $(CFLAGS) -c setnet.c
preproc.o: preproc.c $(OBJECTS) preproc.h servfile.h
 $(CC) $(CFLAGS) -c preproc.c
clean:
 rm -f preproc *.o
install:
 cp ./preproc /usr/local/bin;\
 chmod 755 /usr/local/bin/preproc
--
Marco Coppo
University Of Sheffield
FAQ di it.comp.lang.c:
http://www.programmazione.it/linguaggi/c/itcomplangc.htm

 La funzione openfile è definita nel file servfile.c dove ho il codice:


 Davide
That's it! Grazie mille, mi era sfuggito
ciao ciao
Marco


 {
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 #include "servfile.h"
grazie mille.. in quel casino me l'ero perso!
ciao
M
Newsgroup: it.comp.lang.c
Titolo: Accesso alle porte seriali

Ciao al NG.
Devo scrivere un programma che deve leggere/scrivere dalle porte
seriali del comp.
Deve farlo in modo "grezzo " o quanto più controllabile possibile.
Quali sono le istruzioni-librerie per accedere alle porte COM?
Grazie in anticipo a chi darà un aiuto.
firo

 Quali sono le istruzioni-librerie per accedere alle porte COM?
Se si trattta di un PC con Windows ed utilizzi il compilatore Microsoft puoi
utilizzare CreateFile().
Io la ho utilizzata un'applicazione che gira sotto NT.
In questo modo l'applicazione apre le porte, ma certo non in modo "grezzo".
Ciao Alex



Ciao.
Il compilatore è il TurboC in DOS puro.
Il programma deve controllare un tranceiver "stupido" che si limita a
inviare/trasmettere  i bit che riceve serialmente dal
sist.remoto/computer: quindi deve gestire il protocollo (preambolo,
byte di start, CRC), sia in trasmissione che in ricezione.
Per questo mi serve un modo "grezzo" (raw) (o almeno credo, forse me
la cavo con dei byte dal valore opportuno).
firo

 Il compilatore č il TurboC in DOS puro.
allora guarda se la funzione bioscom ti puo' essere utile.
utilizza il bios quindi ha bisogno dell'handshake hardware.
ciao
donCiccio


wrote:

Puoi spiegarti meglio?
BIOSCOM č una funzione o una libreria?
Sui manuali che ho non ne trovo traccia.
Grazie
firo 

 BIOSCOM č una funzione o una libreria?
e' una funzione, con prototipo in bios.h.
Dall'help in linea del BorlandC (il TurboC dovrebbe essere uguale):
  bioscom and _bios_serialcom Ś     <BIOS.H>
 _____________________________Ś
 RS-232 communications (serial I/O)
 Declaration:
  _ int bioscom(int cmd, char abyte, int port);
  _ unsigned _bios_serialcom(int cmd, int port, char abyte);
 Remarks
Both bioscom and _bios_serialcom use BIOS interrupt 0x14 to perform
various
RS-232 communications over the I/O port given in port.
ciao
donCiccio


Grazie DonCiccio.
Cerco di risolvere e faccio sapere sul NG se sarò riuscito
ad addomesticare la cosa.
firo
Newsgroup: it.comp.lang.c
Titolo: errore contronto carattere

Ciao a tutti
piccola domanda non riesco a capire perchè ottengo errore nel mio codice al
punto del if:
char nomeutente[8]
//a nomeutente poi viene assegnato un valore..
if nomeutente[0]=='A'
{
//istruzioni..
}
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 if nomeutente[0]=='A'
if (nomeutente[0]=='A')
Ciao.


No le ho dimenticate di postare ma le parentesi le avevo messe e non va..


 
forse manca il ; dopo il char nomeutente[8]
in questi casi aiutano le seguenti cose:
fare copia ed incolla ESATTI delle linee incriminate
dire quale errore si genera


 }
ciao.
Esattamente che errore ottieni? Poi: e' in compilazione o a run-time ?
ciao
Giacomo

No le ho dimenticate di postare ma le parentesi le avevo messe e non va..
Che intendi per "non va" ?