mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: semafori

Buon pomeriggio
i semafori sono implementati nel S.O. o in un linguaggio di programmazione
le funzioni wait e signal sono esse stesse sezioni critiche e vanno 
eseguite in modo atomico
sui sistemi monoprocessore questo avviene disabilitando le interruzioni, 
mentre sui sistemi multiprocessori, utilizzando istruzioni in hardware 
come TestAndSet o swap.
sono corrette le affermazioni elencate?
vi ringrazio


A me sembra che ci sia solo una grande confusione..

 A me sembra che ci sia solo una grande confusione..
per eseguire in modo atomico le call system wait e signal come si opera?
grazie


non sono atomiche.
semplicemente il kernel, dopo la chiamata alla wait, non fa più
passare il controllo al programma chiamante, eliminandolo dalla coda
dei processi del rescheduler.
ciao!

 i semafori sono implementati nel S.O. o in un linguaggio di programmazione
Se non ricordo male sono i monitor ad essere implementati nel 
linguaggio, come ad esempio succede in Java (v. Tanenbaum).

 linguaggio, come ad esempio succede in Java (v. Tanenbaum).
Ultimamente anche Java viene implementato su monitor e televisioni ;)
Newsgroup: it.comp.lang.c
Titolo: ritorno variabili locali

Supponiamo che nel corpo di una funzione dichiari:
char a[10];
char *b;
Se ritorno a, il compilatore mi avverte che sto cercando di riornare
l'indirizzo di una variabile locale, mentre se ritorno b non dice nulla. Ma
non sono entrambe variabili locali? Grazie.


"a" e' un nome simbolico corrispondente ad un indirizzo di memoria
sullo stack della funzione e abbastanza grande da contenere 10 char.
Quando esci dalla funzione perdi questo spazio.
"b" inceve e' solo un puntatore, e come tale puo puntare a qualsiasi
cosa... anche a uno spazio di memoria sullo heap, quindi a memoria che
non verra' distrutta dopo il ritorno dalla funzione. Se poi tu ti
sbagli e gli fai puntare un'area di memoria sullo stack della funzione
sono affari tuoi, non del compilatore... ma come detto a priori e'
lecita come operazione.
-- 
Mox

cosa... anche a uno spazio di memoria sullo heap,
Conosco il concetto di heap, ma in questo contesto di cosa si tratta?
-- 
Cordiali saluti
  Artemio

Conosco il concetto di heap, ma in questo contesto di cosa si tratta?
Vuoi sapere a cosa punta b? Il dono della chiarovegenza non ce l'ho
ancora :)
Scherzi a parte, cosa vuoi sapere? Non puoi scoprire a cosa punta b se
non a runtime, e visto che il C non e' interpretato il tutto e'
lasciato alla cognizione del programmatore.
-- 
Mox

lasciato alla cognizione del programmatore.
Si, certo. :-)
Non mi riferivo alla tua descrizione del funzionamento dei puntatori,
ma al concetto di heap cosa c'entri uno heap con la gestione della
memoria. L'ho studiato solamente quest'anno al corso di algoritmi, e
ne conosco (credo) le proprietą ed i metodi per realizzarne uno, ma
non riesco ad immaginare (scarsa fantasia?) che cosa possa avere a che
fare con la gestione della memoria.
Per il resto capisco bene il discorso sui puntatori e sullo stack.
Per caso i puntatori vengono raccolti in uno heap?
-- 
Cordiali saluti
  Artemio

fare con la gestione della memoria.
Sono 2 cose diverse anche se si scrivono allo stesso modo.
L'heap che studi ad algoritmi e' una struttura dati con particolari
proprieta' che dovresti conoscere bene se hai appena studiato.
Dall'altro lato l'heap va' inteso come pool di memoria libera (gestito
dal sisop, a te non interessa come (perche' hai apposite funzioni per
lavorarci)... a meno ovviamente che tu non sia uno sviluppatore del
kernel. La malloc pesca dello heap una porzione di memoria libera...
la free la ritorna allo heap.
Su alcuni sistemi sei garantito che alla terminazione del tuo
programma tutta la memoria che avevi allocato verra' liberata dal
sistema operativo, su altri no... quindi se hai fatto tutte le free
del caso bene, se no hai perso quella memoria (nel senso che risulta
allocata e non puo' piu' essere utilizzata, ma a tutti gli effetti non
esiste piu' nessuno che sia in grado di usarla).
-- 
Mox


...per sempre????
TROLLallero TROLLalla ;)


... fino al primo crash o reboot, a seconda di quello che si verifica
prima :P
-- 
Mox
Newsgroup: it.comp.lang.c
Titolo: Net view c/c++

Salve,
sapete dove posso trovare un esempio c/c++ su come realizzare una funzione
simile al "net view" che mi fà vedere tutti gli utenti connessi sul mio
dominio?
Grazie
xoooox
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Anche questo dipende fortemente dal sistema operativo che usi, e non 
c'entra col linguaggio. Posta su newsgroup piu' adatti (dato che mi pare 
win, it.comp.programmare.win32 se la memoria non mi inganna)
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

Newsgroup: it.comp.lang.c
Titolo: Struct e funzioni!

1.Si puo passare una struct come parametro ad una funzione?
If it's right...
2. Qual è la sintassi giusta?

 2. Qual è la sintassi giusta?
circa questa:
struct pippo
{
  char x[1000];
};
void fun ( struct pippo s )
{
  printf( "%s\n",s.x );
}
void main ( void )
{
  struct pippo p;
  strcpy( p.x,"ciao" );
  fun( p );
}
ciao
donCiccio

void main ( void )
Non e' la forma corretta con cui scrivere il main.
Per le prossime volte, ti consiglio di suggerire :
int main()
--
Walkie...@Libero.It (ICQ# 8143647)

 int main()
ok.
e' un mio difetto, uso la versione "int main" solo se il mio programma deve
effettivamente ritornare qualcosa al SO altrimenti no.
cmq lo terro' presente (almeno nelle risposte qui sul NG)
ciao
donCiccio

 Metti nel .h lo struct
struct struttura
{
     char *nome_computer;
};
Nel .c scrivi il prototipo che richiameranno altri .c
struct struttura * riempi_struct();
struct struttura  * riempi_struct()
{
    struct struttura *strutturina;
    strutturina = (struct struttura *) malloc (sizeof(struct struttura ));
    strutturina->nome_computer = "xxx";
    return (strutturina);
}
in un qualsiasi file la richiami....
struct struttura *richiama_struct;
richiama_struct = riempi_struct();
spero di esserti stato utile...ciao!!!

> spero di esserti stato utile...ciao!!!
un po complicato :) ma tnx a tutti
Newsgroup: it.comp.lang.c
Titolo: Apache e Cgi C

Ciao,
  lavoro su Solaris X86 2.6, sul quale faccio girare
un apache httpd 1.3.
Non ho mai usato i cookie, ma ora ne ho bisogno.
Ho capito come fare il set-cookie... abbastanza semplice,
basta aggiungere nell'header la richiesta del cookie.
Da quanto ho capito nelle specifiche di netscape, il browser,
quando mi richiede la pagina, assieme alla richiesta mi
manda un cookie: ....
A questo punto... come faccio io a guardare il mio cookie
da una CGI scritta in C ?
Grazie per il Soccorso, Ciao.

 da una CGI scritta in C ?
non e' una risposta ma una domanda ;) come fai a passare i dati presi da
una form in HTML alla CGI in c senza usare gli argomenti ?
ciao.
Vecna.

 una form in HTML alla CGI in c senza usare gli argomenti ?
Allora... tu hai due metodi per trasmettere i dati di una form,
che corrisondono ad GET e POST del tag
<FORM ACTION=....programma... REQUEST_METHOD=......>
Il metodo GET appende i dati in chiaro all'URL della cgi seguita
da un punto interrogativo. Il metodo POST, invece, mette i dati
nello standard input.
Nel primo caso tu i dati li leggi nella variabile d'ambiente QUERY_STRING
con un
char *query=getenv ("QUERY_STRING");
nel secondo, invece, te li ritrovi nello STDIN... e te li leggi con delle
GETS o
SCANF... o con quello che vuoi!
Ti consiglio una libreria, che ti sgrava di molto il lavoro di
ENCODING - DECODING dei dati: cerca "Jemtek CGI"
Spero di essere stato esaustivo, anche se ti sincero di non aver capito che
cosa intendevi per argomenti.
Ciao.
PS: Grazie per la risposta ;)

 una form in HTML alla CGI in c senza usare gli argomenti ?
Esistono due metodi per passare i dati al CGI. Uno e' il GET e l'altro e' il
POST. Col primo gli argomenti vengono passati come argomenti, con il
secondo vengono passati come standard input.
-- 
Undergraduate student of Computer Science 
SysAdm on 
cantina.students.cs.unibo.it
http://caristudenti.cs.unibo.it/~celli
Newsgroup: it.comp.lang.c
Titolo: Conversione sorgente da pascal a C

Salve a tutti.
Devo convertire una dei pezzi di codice da Pascal C e vorrei qualche 
dritta su come   fare :))
mi serve trasformare un carattere nel suo numero ascii in pascal faccio: 
myString definito di tipo string
myString := 'Pippo';
myAscii difinito di tipo integer
myAscii := ORD(MyString[1]); // La fn ORD estrae dal carattere 'P' il 
valore ascii (80)
in questo modo nella variabile myAscii mi ritrovo il valore che poi vado 
a modificare e a riassegnare ad una terza variabile myNewValue di tipo 
string facendo
myAscii := myAscii + 25;
myNewValue := Char(myAscii); // la char mi ritona il carattere 'i'
il tutto rinchiuso dentro un loop che è definito da 1 a length(pippo);
Ho fatto alcune prove ma non riesco a districarmi con le conversioni da 
carattere a intero (valore ascii) e viceversa.
il codice completo pascal è:
Var i:Byte;
     myAscii :LongInt;
     myString,myNewValue, myResult: String;
begin
   myString := 'Pippo';
   myResult := '';
   for i := 1 to length(myString) do
   begin
     myAscii := ORD(MyString[1])+25;
     myNewValue := Char(myAscii);
     myResult := myResult + myNewValue;
   end;
end;
Ringrazio chi puo' darmi una mano
Saluti Goblin
-- 
Ibis et redibis non morietur in bellum.

 carattere a intero (valore ascii) e viceversa.
In C non devi fare alcune conversione, una variabile di tipo char è una
variabile intera.
Ad esempio:
char myChar = 'P';
myChar += 25;   /* ora myChar rappresenta il carattere 'i' */
Quindi ad esempio:
#include <string.h>
unsigned char i;
char myString[6] = "Pippo";
char myResult[6] = "";
for (i = 0; i < strlen(myString); i++)     /* somma 25 ad ogni carattere
della stringa */
     myResult[i] = myString[i] + 25;

 
Ti ringrazio tanto x la "dritta" sono riuscito a fare il tutto ...
Grazie

Newsgroup: it.comp.lang.c
Titolo: errore di link

Ma un errore cosě in fase di link cosa significa? Perchč non trova main?? :|
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

 LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Hai messo una funzione main() in uno dei file nel progetto VC++?
Se vuoi produrre un eseguibile, ho paura che la sua presenza sia
obbligatoria.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 obbligatoria.
Eh si... č proprio quello che non capisco.... la funzione main c'č.


Sicuro di non aver scritto una delle seguenti queste cose?
    int Main ()
    {
       ...
    }
    int maine ()
    {
       ...
    }
   #define main pippo
   ...
   int main ()
    {
       ...
    }
   /* Inizio della funzione main *
   int main ()
    {
       ...
    }
   /* Fine della funzione main */
--
Cingar
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

> Sicuro di non aver scritto una delle seguenti queste cose?
Il codice non l'ho scritto io però mi sembra corretto....
main(int argc, char *argv[])
{
int i,k;
char *remap,*remap2;
unsigned char *p1, *p2;
.
.
ecc. ecc.
exit(0);
}

 main(int argc, char *argv[])
Be, "corretto"... Ci metterei un "int" prima del nome della funzione.... Ma
non è certo questa la causa del problema.
Resta l'ipotetesi della "#define main pippo". Per falsificarla senza dover
cercare in tutti i sorgenti, prova a mettere "#undef main" subito prima
dell'inizio della dichiarazione del main.

Newsgroup: it.comp.lang.c
Titolo: Clrscr() e Matrice intera....non compatibili??

Salve a tutti. Come da oggetto il mio problema riguarda un mio programma
dove utilizzo la funzione di conio.h clrscr() che pulisce lo schermo.
In questo programma oggi ho inserito una matrice intera Coppia[2][57]....e
da qui sono nati tutti i miei problemi.
Il primo: avevo dichiarato la matrice in nella stessa riga in cui dichiaravo
tutti gli altri vettori, in questo modo:
int p[36],psestina[6],pterzina[12],pcarre[22],coppia[2][57];
...ma ho subito notato problemi. Infatti quando assegnavo un valore a un
qualsiasi elemento di psestina o anche pterzina, automaticamente assegnava
un valore anche ad un elemento di coppia[1]....sono riuscito a risolvere
cambiando riga di dichiarazione:
int p[36],psestina[6],pterzina[12],pcarre[22];
....
int coppia[2][57];
...ma la mia domanda era: perchč si č comportato cosě?? Se qualcuno me lo
spiega....grazie.
Ma il problema veramente importante č che una volta che richiamo la matrice
coppia anche solo una volta, poi in tutto il programma non funziona piů
clrscr() (so che il problema risiede nella matrice perchč provando a
cancellare la riga di codice che le assegna dei valori tutto funziona
bene)....qualcuno sa aiutarmi??? Grazie a tutti.

Dai "sintomi", io direi che e' il classico problema di array overflow... 
  ovvero, nessuna libreria ha nessun problema, ma sei tu che accedi ad 
uno o piu' array fuori dai loro "bound", e quindi vai a modificare zone 
di memoria che non c'entrano nulla (e, a quanto pare, in modo abbastanza 
pesante, dato che riesci addirittura a mandare in palla una banale 
clrscr). Ricontrolla con attenzione il codice nei punti in cui accedi 
agli array.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */
Newsgroup: it.comp.lang.c
Titolo: cvs

Salve a tutti..premetto che prima di postare mi sono
dato da fare
con la documentazione ..ma niente
non riesco a scaricare i sorgenti tramite cvs di un progetto
che mi interessa nello specifico movix 
http://movix.sorceforge.net
(lo
consiglio a tutti/e)
io cerco di accedere anonimamente con
$ cvs -d:pserver:anon...@cvs.sourceforge.net:/cvsroot/movix login
ma non funziona...come posso fare?
grazie a tutti/e

 ma non funziona...come posso fare?
Sei totalmente  OT e hai dimenticato  di guardare nel posto  piu` ovvio:
sourceforge. Se l'avessi  fatto avresti scoperto  che i server  CVS sono
sovraccarichi  e che  viene  privilegiato  l'accesso degli  sviluppatori
piuttosto che degli utenti normali.
K
-- 
Home: 
http://kronoz.cjb.net
"New processes are created by other processes, just like new
 humans. New humans are created by other humans, of course,
 not by processes." -- Unix System Administration Handbook

Newsgroup: it.comp.lang.c
Titolo: matrice avente dimensioni pari al valore di 2 var intere





E' possibile dichiarare cioè una


 


float matrix[a][b];


 


dove a e b sono già 
dichiarati int?


il mio compilatore (VC6.0) mi dice che la 
dimensione deve essere costante, anche se in realtà il valore di a e b, al 
momento dell'utilizzo della matrice, sono noti e assegnati. 


Qualcuno sa consigliarmi come aggirare il problema? 
O ho preso un abbaglio??


Ciao e BUON ANNO!


M D




In C non si puo' dichiarare una matrice mettendo come indici
delle variabili ma si possono soltanto mettere
delle costanti numeriche (o delle macro che si
riferiscono a costanti numeriche).
Per risolvere il tuo problema, potresti fare
un' allocazione dinamica della memoria della matrice
dichiarando (per esempio):
float **matrix;
int a=4, b=5; /*per esempio*/
/* e poi chiamando la funzione (che sara' spiegata in seguito)
flomat2(int, int)
in questo modo: */
matrix = flomat2( a , b );
/* a questo punto si puo' usare
matrix come si trattasse di una normale matrice con 4 righe e 5 colonne
(perche' a=4 e b=5 , ma si potevano anche mettere altri valori
di a e b per ottenere un diverso numero di righe e/o colonne)  :
per esempio si puo' accedere all'elemento [0][1] in questo modo:
(per esempio se f e' un float)
f = matrix[0][1];  **/
/** di seguito trovi il codice della funzione flomat2
(dovrebbe funzionare) **/
#include <stdio.h>
#include <stdlib.h>
float **flomat2(row,col)
int row,col;
{
int i ;
register float **prow, *pdata ;
pdata = (float *) calloc(row * col, sizeof(float) ) ;
if ( pdata == (float *) NULL )
   {
   fprintf(stderr,"Error: no heap space for data\n") ;
   exit(-1) ;
   }
prow = (float **) calloc(row, sizeof(float *) ) ;
if ( prow == (float **) NULL)
   {
   fprintf(stderr,"Error: no heap space for row pointers\n") ;
   exit(-1) ;
   }
for (i=0 ; i < row ; i++)
   {
   prow[i] = pdata ;
   pdata+= col ;
   }
return(prow) ;
}
Sent via Deja.com
http://www.deja.com/
Newsgroup: it.comp.lang.c
Titolo: fgets

while (fgets (line,80,ifp))
..ops..non sta bene andare a sovrascrivere il s.o. ! ;)
L'uso corretto e' 
char * line = malloc( 81 ) ; 
/* allochiamo uno spazio di 81 byte solo per *line */
...
while ( fgets( line, 80, ifp ) );
/* ora possiamo usare quello spazio senza problemi */
Skyscraper (apprezzatelo adesso : eviterete la coda)
----------------------------------------------------
 
andrea_...@bigfoot.com
----------------------------------------------------
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

 ).
Il programma deve terminare con una '}' e senza il punto finale.
EMG

 while ( fgets( line, 80, ifp ) );
Dato che fgets() legge al massimo il numero di caratteri indicato _meno_
uno, non c'č bisogno di dimensionare il buffer con un carattere in piů.
EMG

Newsgroup: it.comp.lang.c
Titolo: exit e waitpid, dove sbaglio?

Eseguendo il programma x il cui sorgente riporto in fondo, l'output che ho a video è il seguente:
-------------------------------------------
bash-2.o5b$ ./x
3440: sono il padre di 300.
3440: dopo waitpid pid=300, pid2=0, cod=99 <----------
bash-2.o5b$ 
300: cod=5
300: faccio exit(5)
bash-2.o5b$ 
-------------------------------------------
Io mi aspetterei al punto indicato dalla freccia di avere
...cod=1280 (ossia 256*5)
Quale grosso abbaglio sto prendendo?
Grazie mille, W.
****************************
#include <stdio.h>
int main()
{
int cod=99
  ;
pid_t pid
    , pid2
    ;
pid=fork();
if (pid==0) //===figlio====
{
cod=5;
printf("\n%i: cod=%i.\n", getpid(), cod);
printf("\n%i: faccio exit(%i)\n", getpid(), cod);
exit(cod);
}
else //===padre========
{
printf("\n%i: sono il padre di %i.\n", getpid(), pid);
pid2=waitpid(pid, &cod, 1);
printf("\n%i: dopo waitpid pid=%i, pid2=%i, cod=%i.\n", getpid(), pid, pid2, cod);
}
}
;

 Eseguendo il programma x il cui sorgente riporto in fondo, l'output che
 > ho a video è il seguente:
Il tuo programma fa uso di funzioni che non fanno parte del linguaggio C 
standard, ma sono caratteristiche di un particolare sistema operativo. 
Dovresti quindi rivolgerti al gruppo di discussione relativo (se lavori 
sotto GNU/Linux, il gruppo in questione e` it.comp.os.linux.development).



Azz! Chiedo venia, sparisco all'istante!
W.

 wrote:

Prego tutti quanti di non proseguire questo thread.
Ho ripostato il messaggio su it.comp.os.linux.development.
Chi vuole risponda lì.
Grazie e scusate di nuovo.
W.
Newsgroup: it.comp.lang.c
Titolo: [semi OT] Generatore di codice per microcontrollori/telecomandi

Ciao NG,
 
Sì, so che non sono completamente IT ma vedo anche che non
c'è troppo traffico :( e magari mi passate il post.
L'attinenza col C credo possa stare nel fatto che a quanto
posso vedere è il linguaggio di scelta in casi come il mio.
 
Sto scrivendo la logica di controllo per una scheda
arduino e sono alle prese con l'implementazione delle
"solite cose", esempio, tenendo premuto un tasto si
accende e spegne l'apparecchio da controllare, tenendo
premuto per un tempo minore si passa in modo comando, come
riconoscere che un tasto è stato premuto e così via.
 
Non ho difficoltà, dato che il tutto funziona. Ma
anzitutto posso essere certo che non ho messo in piedi
un'implementazione elegante e soprattutto, se volessi
cambiare di poco la logica di controllo gli interventi sul
codice non sarebbero tanto localizzati e parametrizzati
(me ne sto accorgendo durante lo sviluppo...). Peggio di
ogni altra cosa, è che ogni volta il tutto andrebbe
testato e non sono certo di sapere/poter fare un'analisi
fattoriale.
 
Orbene, esiste qualche tool che accetti una descrizione
del funzionamento desiderato e produca un codice
abbastanza efficiente da essere digerito dalla scarsa
memoria a disposizione?
 
denghiu!
 
Apx.
 
-- 
Un corpo immerso in un liquido si bagna.
Un corpo immerso nel cemento sapeva troppo.
Un corpo immerso in un altro corpo si diverte.
Un corpo immerso in due corpi è un'orgia.
 

 essere digerito dalla scarsa memoria a disposizione?
 
Da alcuni anni non ho piï¿œ seguito gli sviluppi di simili tool ma finchï¿œ 
vi ho lavorato non sono mai riuscito a trovarne uno che si adattasse 
alle applicazioni embedded per cui intendevamo servircene.
 
La scarsitï¿œ di memoria ed i requisiti real time delle applicazioni 
rendevano inutilizzabile il codice prodotto.
 
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >
Newsgroup: it.comp.lang.c
Titolo: URGENTISSIMO, HELP

Vorremmo poter gestire in modo piu' elegante un nostro programma
in C sotto Unix; in altre parole esiste una sorta di gotoxy()
sotto unix ???
Sarebbe anche bello poter dividere la finestra nella quale
lavoriamo in due: nella parte superiore mandare in exec
un processo e in quella inferiore l' altro processo.
Qualcuno puo' aiutarci ???????
Grazie e ciao a tutti.. :-)
PRINA LUCA e CAMBIERI PAOLO
pr...@iol.it
lp50...@silab.dsi.unimi.it
--
Automatic posted from [149.132.55.1]
via Mailgate Server - 
http://www.mailgate.org

Devi usare una libreria che permetta l' indirizzamento diretto delle colonne
e delle righe (mi sono spiegato malissimo). Comunque normalmete in ambienti
Uni* c' e' la libreria curses o la ncurses che sono molto buone e molto ben
documentate. Sotto Linux puoi trovare anche la S-Lang che e' molto veloce ma
mal documentata. Per gli altri ambienti (tipo DOS) di solito con il
compilato re c' e' anche una libreria NON STANDARD che prevede queste
funzioni.
Spero ti sia servito ciao.
-- 
  +   SSS H H AAA RRR  K K  Life is great . . . 
+++++ SSS HHH A A R R  KK   When you know how to live it !
  +     S H H AAA RRR  K K  Life is a bitch . . .
  +   SSS H H A A R  R K  K And then you die !

 un processo e in quella inferiore l' altro processo.
Devi usare delle librerie come ncurses o slang. Per il gotoxy() puoi usare i
codici ANSI.
-- 
Matteo Gottardi / 
gma...@usa.net
*Linux*, The choice of a _GNU_ generation
Newsgroup: it.comp.lang.c
Titolo: Thread

 Salve,
    voglio sapere tutto sui thread! 
Sapete dove posso andare per trovare info?
Saluti,
  Fidelio
P.S. Programmo sotto MS-DOS. Dovrei sviluppare io un sistema per implementare i thread.
--
Posted from 
mta.iol.it
 [195.210.91.150]
via Mailgate.ORG Server - 
http://www.mailgate.org

 
Prova a scaricare jtlwp20s.zip
(
ftp://ftp.flashnet.it/pub/simtelnet/gnu/djgpp/v2tk/jtlwp20s.zip
). Contiene
il codice sorgente per aggiungere i thread al DJGPP e il file tech.doc che
spiega come funzionano.


 Grazie per il suggerimento... anche se un po' in ritardo ;-),
Comunque, mi sono programmato un'interfaccia per il mio Turbo C++ 3.0 con
risultati abbastanza soddisfacenti.
A proposito,
  conosci un modo semplice per visualizzare il registro IP o EIP ?
 Grazie ancora,
 Fidelio
#---------------------------------------------------------------------------
---------------------#
#- Dark Code Interactive Software - Department of New Technologies
Research -#
#---------------------------------------------------------------------------
--------------------#

 
Intendi dire leggere EIP (instruction pointer ?) in un determinato punto
del codice per voi visualizzarlo ?
Il codice deve ovviamente leggere "se stesso" run-time (ovviamente il
valore che avra' l'EIP all'entry point di una procedura si ricava
semmplicemente con unsigned int *EIP=NomeProcedure) e poi chiamare la
procedura di visualizzazione. Tutti i sistemi che conosco sono intrusivi
(devi aggiungere codice):
dummy()
{
  unsigned int *EIP;
  ...
  EIP=GetEip();
  ...
  PrintEip(EIP);
  ....
}
Dove GetEip() puo' essere:
- Una funzione built-in (inline) fornita dal compilatore, se la CPU
permette la lettura diretta dell'IP (mi sembra che gli x86 non lo
consentano)
- Una funzione inline scritta in assemblerm sempre che sia consentita la
lettura dell'IP
- Una funzione che va a leggere l'indirizzo di ritorno 'push-ato' sullo
stack dalla call GetEip()
Nell'ultimo caso, si tratta di scrivere una funzione assembler che ritorna
il valore dell'IP ricavato dallo stack, oppure si puo' provare a scrivere
la stessa cosa in C sfruttando:
unsigned int *GetEip(void)
{
  char stack_marker;
  char **p;
  p=&(stack_marker);
  return *((unsigned int **)(p[EIP_OFFSET]);
}
Dove EIP_OFFESET e' uguale al numero di byte aggiunti sullo stack dal
compilatore come prologo della funzione C (per saperlo bisogna andare a
vedere l'assembler).
Io uso questo sistema per scoprire dove e' stato interrotto il mio codice
in seguito ad un'interrupt.


  Anche io uso il sistema di prelevare l'IP dallo stack. Poi pusho un altro
valore e il programma va dove voglio io!
Cmq grazie. Pensavo ci fosse un altro modo.
 Saluti,
 Fidelio
Newsgroup: it.comp.lang.c
Titolo: if con stringhe

mi sono avvicinato da appena due giorni al c e dopo un po' di successi, 
mi sono imbattuto in questo problema: vorrei fare una semplice 
applicazione che se l'input č ad esempio "aaa" stampi a video la stringa 
"bbb". sono riuscito a farlo con gli interi, ma con le stringhe non ci 
riesco. ecco il codice di quello con gli interi:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
     for ( ; ; )
         {
             int numero;
             scanf("%i", &numero);
             numero = (int)numero;
             if (numero == 1)
             {
                 printf ("1\n");
             } else if (numero == 2) {
                 printf ("2\n");
             } else {
                 break;
             }
         }
}
avete qualche dritta?
-- 
e-mail: 
robi...@libero.it
page: 
http://robiweb90.altervista.org
"Tre Anelli ai Re degli Elfi sotto il cielo che risplende,
Sette ai Principi dei Nani nelle lor rocche di pietra,
Nove agli Uomini Mortali che la triste morte attende,
Uno per l'Oscuro Sire chiuso nella reggia tetra
Nella Terra di Mordor, dove l'Ombra nera scende."
J. R. R. Tolkien - Il Signore degli Anelli

riesco. 
Questo perche' la stringa in c non e' una variabile, ma il puntatore
ad una zona di memoria, e per questo, se scrivi:
char a[40] = "ciao";
'a' conterra' un indirizzo di memoria, non la stringa "ciao". Per
comparare due stringhe, usa strcmp() (in string.h):
int strcmp(char *str1, char *str2);
se torna  0, str1 = str2
se torna >0, str1 > str2
se torna <0, str1 < str2
Ad esempio:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void){
    char nome[256];
 
    printf("come ti chiami?\n");
    gets(nome);
    if(strcmp(nome,"Zeppe") == 0)
        printf("Ciao, Zeppe!\n");
    else
        printf("Ciao, altra persona!\n");
    system("pause");
    return 0;
}
Ciao,
Zeppe

 
cut code
grazie, comunque avevo risolto in chat (#c)


 avete qualche dritta?
#include <stdio.h>
int main()
{
    char s[50];
    int i;
    fgets(s, sizeof s, stdin);
    for (i=0; s[i]; i++) if (s[i] == '\n') s[i] = '\0';
    if (!strcmp(s, "aaa"))
    {
       puts("bbb");
    }
    return 0;
}

     gets(nome);
Imparate ad usare fgets()

Imparate ad usare fgets()
Eh, parole sante... :D
Ciao,
Zeppe
Newsgroup: it.comp.lang.c
Titolo: Pacchetti

Quello a cui mi riferisco č il poter creare pacchetti secondo le
specifiche del protocollo tcp/ip personallizzati.
Che libreria devo includere per poter fare questo?
E soprattutto dove trovo la documentazione?
 ------------------------------------
 Il peccato di Caino
 La seduzione del male
 
www.vampiripavia.com
-------------------------------------
                *IcarusDream*
  -Dove un sogno č ancora libero-


I'm not prejudiced, I hate everyone equally.

Newsgroup: it.comp.lang.c
Titolo: aiutino per inesperto

devo sviluppare un'applicazione che collega, tramite TCP/IP, un client a un
server.
Il cliente chiede dei dati, il server, che lo ha riconosciuto, glieli da e
la connessione si chiude.
NON SO DA CHE PARTE COMINCIARE!
Qualcuno ha qualche riferimento di cose (libri, sorgenti, ...) da studiare?
Se questo qualcuno si impietosisce puņ mandarmi i riferimenti a
de...@hotmail.com
Vi ringrazio fin da ora

 cose (libri, sorgenti, ...) da studiare?
  Per una cifra ragionevole (IVA esclusa) posso scrivertelo io... ;)
  Scherzi a parte: necessitaci sapere *almeno* il sistema operativo su
cui andrai ad operare (se non lo strumento di sviluppo che hai
scelto)...
	Alla prossima,
		Marco

Piattaforma: PalmPilot (per il client) NT per server
Ambiente di sviluppo: ho la sensazione che si possa fare solo in C
(Codewarrior)

 C (Codewarrior)
  Se esiste Windows CE per PalmPilot (mi sembra), allora il Visual C++
ti puo` veramente dare una mano (cerca la classe CSocket e studiatela
bene) oppure, se sei un purista del C, puoi utilizzare, ammesso e non
concesso che esistano, le WinSocket. (*)
  Altrimenti, c'e` Linux... :)
  Ad ogni modo, il succo e` questo: le comunicazioni via TCP sono
modellizzate sul concetto di /socket/ (presa elettrica), trattate come
se fossero descrittori di file. Una transazione TCP si divide in tre
fasi: l'apertura del socket, la trasmissione dei dati, la chiusura.
  L'apertura del socket comprende la risoluzione del nome in indirizzo
IP, il contatto con l'altra macchina (/peer/), lo stabilimento di una
connessione e l'associazione di questa al descrittore di socket.
  La trasmissione di dati avviene semplicemente scrivendo o leggendo i
dati dalle socket come se fossero file (piu` o meno).
  La chiusura del socket la lascio alla fantasia del lettore. ;)
  L'architettura client/server di una connessione TCP prevede che ci sia
un server, ossia un programma che gira in continuazione, in ascolto, ed
un client che tenta di contattarlo. A connessione avvenuta, ogni cosa
che l'uno scrive, l'altro legge e viceversa. In definitiva, dovrai
sviluppare -- credo -- due programmi.
  Ad ogni modo, se su Altavista cerchi "socket", trovi tutto quello che
ti serve (ed anche di piu`).
	Alla prossima,
		Marco
(*) Ammesso che non ci sia un'applicazione specifica su NT che fa da
server. DBMS? Web? SNA?
Newsgroup: it.comp.lang.c
Titolo: fgets per stringhe...

Dopo il mex "scanf per stringhe",eccovi un nuovo quesito!
Ho letto le vostre risposte e molti mi hanno consigliato di usare fgets().
Ma non si usa per i file?
come lo devo utilizzare considerando che la mia stringa deve essere
memorizzata in un puntatore di char?
char *esp;
La dovrei utilizzare nel programma postato in "Non uccidetemi..."
Grazie ancora!
Mi state salvando la vita, o meglio, un esame! ;-)
Ciao
Andrea

Ma non si usa per i file?
Certo e quindi si usa anche per l'input, visto che e' esso stesso
racchiuso in un file :
char esp[60] ;
...
fgets( esp, 50, stdin ) ;
                ^^^^^
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------

 char *esp;
char *esp = malloc( lunghezza_massima_riga );
if ( !esp ) /* Memoria insufficiente */
while( fgets( esp, lunghezza_massima_riga, file ) )
    /* Fai quello che devi con la riga letta in esp */
free( esp );
EMG

 fgets( esp, 50, stdin ) ;
C'č un motivo particolare per leggere solo 50 caratteri in un array da
60 o č stata solo una svista?
EMG

60 o è stata solo una svista?
Ops, avevo scritto inizialmente 50 tra le parentesi.
Comunque meglio usare "sizeof esp"


Newsgroup: it.comp.lang.c
Titolo: Generare un numero casuale tra "min" e "max"

 
RAND( ) Function
Returns a random number between 0 and 1.
rand() restituisce da 0 a 1 compresi, quindi è giusto
 num = min + ( rand() * (max-min) )
se num deve essere un float.
Se invece num deve essere un integer bisogna usare una
funzione di arrotondamendo e non di troncamento.
In ogni caso non capisco perché ci hai messo un modulo
al posto del prodotto.
Ciao.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Ermando
RAND( ) Function
Returns a random number between 0 and 1.
rand() restituisce da 0 a 1 compresi, quindi mi sembra giusto
 num = min + ( rand() * (max-min) )
se num deve essere un float.
Se invece num deve essere convertito in un integer
la cosa si fa più complicata.
Per dare a tutti gli interi la stessa probabilità credo
sia giusto come dici tu (max-min+1) e poi troncare.
Ma bisogna eliminare il caso (max +1), che può verificarsi,
ripetendo in tal caso l'estrazione.
In ogni caso non capisco perché ci hai messo un modulo
al posto del prodotto, mi sembra che
 rand() % 8
possa restituire solo 0 o 1. Inoltre modulo è un operatore
per interi e rand() è un float. Lasciare al compilatore la scelta
delle conversioni è un po' imprudente. 


 rand() restituisce da 0 a 1 compresi, quindi e` giusto
Cazzate. rand() ritorna un interno compreso tra 0 e RAND_MAX.
7.20.2.1 The rand function 
1 Synopsis 
#include <stdlib.h> 
int rand(void); 
2 Description
The rand function  computes a sequence of pseudo-random  integers in the
range 0 to RAND_MAX.
[cut]
5 Environmental limits
The value of the RAND_MAX macro shall be at least 32767.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
La differenza fra l'intelligenza e la stupidita`?
All'intelligenza c'e` un limite.

 Cazzate. rand() ritorna un interno compreso tra 0 e RAND_MAX.
Oops!, è vero. Ho guardato la RAND() di FoxPro.
Grazie. 

Newsgroup: it.comp.lang.c
Titolo: chiarimento con acquisizione stringa(beginner)

Sono un novizio del c e della programmazione in generale ed ho un quesito.
Sto facendo un programmino che richiede di inserire 2 stringhe di max 11 
elementi e fin qua tutto ok.
char user[11],pass[11];
printf("\nuser:");
fgets(user,11,stdin)
printf("\npass:");
fgets(pass,11,stdin)
Se l'utente inserisce 11+n caratteri mi ritrovo con pass inizializzata a
n anziche attendere l'input.
escludendo l'aumento dell'array a un numero piu' elevato di elementi 
cosa posso fare?
grazie

 grazie
Prova
Ciao
Matix
Newsgroup: it.comp.lang.c
Titolo: voi ne sapete niente ???

Ciao a tutti....
Stavo pensando se qualcuno di voi potrebbe dirmi qualcosa sui file oggetto
(.obj), precisamente:
supponiamo di avere un programma suddiviso in due file e compilarli con due
compilatori differenti per poi linkarli..... in poche parole i file oggetto
sono standard ??
Io ho provato a compilare con Turbo C++ e Djgpp per poi eseguire il link con
tlink (il linker borland) ma ho avuto una brutta delusione (offset error e
bla bla bla).
Qualcuno di voi mi sa dir nulla a proposito ??.
Emnh scusate gia che sono qua, sapete dirmi dove trovare documentazione
valida per capire cosa siano i vari modelli di memoria (I.E. small, large,
protected mode, cosa è un dos extender e altro...), mi sono un pò scocciato
di programmare ad occhi chiusi..
Ciao a tutti and......
Happy programming.................

 di programmare ad occhi chiusi..
Sull'help del compilatore dovresti trovare valide spiegazioni, ma per
entrare nei dettagli ci vorrebbe un manuale del microprocessore e del suo
assembler.
In breve
Tiny: è un modello che permette di generare i file .COM delle vecchie
versioni del DOS, poi trascinate fino allo stremo. In pratica si tratta di
mettere sia il programma che i suoi dati in un unico segmento di 64K.
Small: Simile al Tiny, ma ora hai 2 segmenti di 64k l'uno: uno per il codice
l'altro per i dati.
Large: Come i primi, ma ora i dati hanno più segmenti da 64K l'uno.
Huge, o varianti: Ora anche il codice può stare su più segmenti di 64K
l'uno.
Nota che la dimensione di 64K deve intendersi come MASSIMA, mentre nessuno
vieta di avere un segmento dati di soli 32K (mi pare che il minimo siano 16
byte).
Il Protected mode è una modalità HW che la Intel ha deciso di introdurre nei
suoi microprocessori. I vari 8086 potevano indirizzare solo 1Mb di RAM, e
tutti i SW (DOS compreso) facevano conto su questo fatto. Per migliorare la
CPU, mantenendo la compatibilità, ha "sdoppiato" il processore, introducendo
2 modalità di funzionamento: una "reale" che era compatibile con i vecchi
chip, l'altra "estesa" o "pretected" dove diventava un microprocessore
migliore.
Poichè comunque il DOS vede solo la vecchia CPU, sono stati creati dei
programmi "dos extender", che permettono comunque al DOS di utilizzare parte
delle nuove possibilità del chip, soprattutto memorie maggiori di 1M.
Spero di essere stato chiaro e corretto.
Ciao
--
Alessandro Monti

di programmare ad occhi chiusi..
L'uso dei modelli di memoria appartiene a compilatori come quelli
Borland e sono totalmente sconosciuti ad altri, come per esempio il
DJGPP.
Per la programmazione in "protected mode", trovi una buona
documentazione sul sito del DJGPP 
www.delorie.com/djgpp/
--
Andrea Laforgia
andrea_...@bigfoot.com
Newsgroup: it.comp.lang.c
Titolo: dubbio su lunghezza array puntatori

Salve a tutti.
C'e' qualcosa che mi sfugge.
Perche' se io dichiaro un array di tipo int di 10elme. e alloco memoria per
un puntatore di 10 int,
quando vado a vedere quanta memoria occupano entrambi mi ritornano valori
diversi?
l'array e' di 10*4=40Byte, mentre il puntatore mi ritorna solo in vlore del
tipo int 4Byte.
Grazie dell'eventuale chiarimento.
Ciao
Esempio
#include <stdio.h>
#include<stdlib.h>
int main(void)
{
   int v[8];
   int *p;
   int n=10;
   printf("%d\n",sizeof(v));
   if((p=(int*)malloc(n*sizeof(int)))==NULL)
   exit(1);
   printf("%d\n",sizeof(p));
   return 0;
}

 del tipo int 4Byte.
E' il comportamento dell'operatore sizeof.
Nel caso di un puntatore ritorna 4 sulla tua architettura (ragionevolmente
corrisponde alla dimensione di un intero).
Nel caso di un array (che non sia decaduto a puntatore) ti ritorna invece la
dimensione totale dell'array (espressa in byte ovviamente).
-- 
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."

 diversi?
Perche` i puntatori non sono array, e viceversa.
Il nome di un array, usato nudo e crudo, si comporta in maniera molto 
simile ad un puntatore costante a dati (variabili o meno), ma e` e 
rimane un array di tot elementi (spalmati su N dimensioni), e di queste 
informazioni in piu` il compilatore tiene traccia (salvo perderle 
mooolto facilmente per strada).
In altre parole:
     int * n1;
non e` la stessa cosa di
     int (*n2)[10];
Il primo e` il solito puntatore a int, il secondo e` un puntatore a (al 
primo elemento di) un array di 10 int.
-- 
   |   \    \  | ___|_  |_  | ianezz a casa sua... :-)
   |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
  _|_/  _\_|  _|____|___|___| 
http://www.linuxtrent.it

 primo elemento di) un array di 10 int.
No, non punta al primo elemento ma all'array nel suo complesso. Infatti
dereferenziando n2 si ottiene l'array non il primo elemento dell'array.
Inoltre n2 + 1 punta al successivo array di 10 elementi e non al secondo
elemento del primo array da 10 elementi. E' chiaro che a basso livello è
come dici tu ma al livello di astrazione del C le cose vanno viste come
ho detto.
Eccovi un esempietto chiarificatore (non ti offendere, lo so che tu
queste cose le sai):
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int ( *p )[ 10 ];
    p = malloc( sizeof( int [ 10 ] ) );
    printf( "%d\n", sizeof( *p ) );
    ( *p )[ 3 ] = 123;
    printf( "%d\n", ( *p )[ 3 ] );
    if ( !p )
    {
        printf( "Memoria insufficiente\n" );
        exit( 1 );
    }
    free( p );
    return 0;
}
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 queste cose le sai):
Non e` vero, credevo di saperle (che e` peggio).
Grazie! :-)


 Grazie! :-)
Figurati. Sono anzi molto contento di esserti stato utile.

Newsgroup: it.comp.lang.c
Titolo: HELP: Memoria condivisa e semafori

Salve
ho realizzato un piccolo programma di un bacheca con memoria condivisa e 
semafori sotto linux.
Compilo ed eseguo, perņ non mi fa vedere i messaggi che inserisco lato 
client. Potete dirmi dove sbaglio o cosa manca?
trovate i file sorgenti commentati a questi link:
http://www.empowermind.it/archivio/bacheca.c
http://www.empowermind.it/archivio/server.c
grazie infinite
M@x

 client. Potete dirmi dove sbaglio o cosa manca?
Dubito che qualcuno abbia voglia di fare il "lavoro sporco" per te.
Debuggare i programmi è quasi più stressante che scriverli (se di grosse 
dimensioni). Usa un debugger: è il programma che non ti fa vedere i 
messaggi quindi perché non chiedere direttamente a lui qual è il problema?
Kiuhnm
Newsgroup: it.comp.lang.c
Titolo: Calcolatrice[Newbie]

#include<stdio.h>
main(){
/*Calcolatrice*/
float primo,secondo,risultato;
char op;
printf("Calcolatrice\n");
printf("Inserisci il 1num,l'operazione,il2num separati da 1 spazio\n");
scanf("%f","%f","%c",&primo,&secondo,&op);
if (op=='-'){risultato=primo-secondo;}
//Stampa del risultato;
printf("Il risultato dell'operazione e': %f",risultato);
return 0;
}
nn riesco a capire come mai mi dà sempre errore windows.. si blocca
ilprompt..
che errore commetto??

#include<stdio.h>
main(){
/*Calcolatrice*/
float primo,secondo,risultato;
char op;
printf("Calcolatrice\n");
printf("Inserisci il 1num,l'operazione,il2num separati da 1 spazio\n");
scanf("%f %f %c",&primo,&secondo,&op);
if (op=='-'){risultato=primo-secondo;}
//Stampa del risultato;
printf("Il risultato dell'operazione e': %f",risultato);
return 0;
}
hpo capito che per mettere i valori separatori da uno spazio devo mettere:
scanf("%f %f %c",&primo,&secondo,&op);
ma risultato mi dà sempre 0.00000000000

Allora la sintassi e la distrazione!!!
Se scrivi disordinato non ti raccapezzi
E' un consiglio :)
#include<stdio.h>
int main(void){
	/*Calcolatrice*/
	float primo,secondo,risultato;
	char op;
	printf("Calcolatrice\n");
	printf("Inserisci il 1num,l'operazione,il2num separati da 1 spazio\n");
// Avevi invertito %f %f %c così non rispettava l'inserimento
	scanf("%f %c %f",&primo,&op,&secondo);
	if (op == '-')
	{
		risultato = primo - secondo;
	}
 
 	//Stampa del risultato;
	printf("Il risultato dell'operazione e': %f",risultato);
	return 0;
}
Ciao Max
-- 
+-----------------------------------------------------------+
| Secondo alcuni autorevoli testi di tecnica Aeronautica,   |
| il calabrone non può volare, a causa della forma e del    |
| peso del proprio corpo in rapporto alla superficie alare. |
| Ma il calabrone non lo sa e perciò continua a volare.     |
|					     Igor Sikorsky  |
+-----------------------------------------------------------+

Finita, posto il codice:
#include<stdio.h>
main(){
/*Calcolatrice*/
float primo,secondo,risultato;
char op;
int errore=0;//variabile di controllo per la divisione
printf("***************Calcolatrice**************\n");
//Digitare numero operazione numero2 seguiti da uno spazio
printf("Digitare l'operazione\n");
scanf("%f %c %f",&primo,&op,&secondo);
if (op=='-'){risultato=primo-secondo;}
if (op=='+'){risultato=primo+secondo;}
if (op=='*'){risultato=primo*secondo;}
if (op=='/'){
            if (secondo==0){errore=1;}
            else{risultato=primo/secondo;}
            }
//Stampa del risultato;
if (errore==0) printf("Il risultato dell'operazione e': %.1f",risultato);
else printf("Si e' verificato un errore!");
return 0;
}
Newsgroup: it.comp.lang.c
Titolo: unsigned int

Ciao,
sapete dirmi qual č il valore massimo che puņ raggiungere un unsigned int?
Grazie
Bizio

 Bizio
Credo dipenda dall'implementazione e dall'architettura
della macchina.
Puoi vederne la dimensione in byte con sizeof().
In genere il range è [0, 2^32-1]
SiMoStro

 sapete dirmi qual ? il valore massimo che pu? raggiungere un unsigned int?
UINT_MAX
Il valore minimo e` 2^16 - 1, quello in uso sul sistema e` definito
dalla macro UINT_MAX (<limits.h>)
Luca
-- 
Home: 
http://kronoz.cjb.net
E' stato a causa di una donna che ho cominciato a bere e non ho mai
avuto la cortesia di ringraziarla.

= 2^16 - 1. Sulle implementazioni intel a 32 bits è di 2^32 - 1.
--- bye

 Bizio
Dipende dallo spazio che il compilatore riserva al tipo di variabile, es: con
il vecchio Turbo c della Borland a quel tipo di variabile erano assegnati 16
bit, invece con il piu recente Borland Builder i bit assegnati sono 32,
considerando che la varibile della quale stiamo parlando è senza segno e con
la possibilità di utilizzare l' operatore sizeof() è abbastanza semplice
calcolare quanto ci si puo 'Infilare' ;-)...
Salutoni a tutti Dave.


int i;
i = -1;
printf("%u", (unsigned int)i);
Ciao.

Newsgroup: it.comp.lang.c
Titolo: VEDO OPENGL SUPERBIBLE

Ti interessi di computer graphics/videogames/programmazione CAD?
E allora non perdere la mia offerta:
VENDO IL PIU' AUTOREVOLE LIBRO SU OPENGL "OPENGL SUPERBIBLE" NUOVO(WAIT GROUP PRESS) A LIRE 100.000 + S.S
AFRETTATEVI!!!
SALUTONI E GRAZIE,
RICCARDO

A che versione della libreria si riferisce 1.0 o 1.1 ?
-- 
ciao e grazie
----------------------------------------------------
 Marco Maroni		mailto:
m.ma...@esa-group.it
 Analista/Programmatore
 ESA Software S.p.A.	
http://www.esa-group.it
 via Draghi, 39		tel. +39 541 368.111
 47900 Rimini (ITALY)	fax  +39 541 368.268
----------------------------------------------------
----------------------------------------------------

Newsgroup: it.comp.lang.c
Titolo: firmware HW come si ottiene?

firmware HW come si ottiene?
Grazie

 Grazie
prego! 8-P
--
-iAN-
Newsgroup: it.comp.lang.c
Titolo: Binario > Decimale

Buongiorno a tutti.
Mi sono messo in testa di svolgere tutti gli esercizi del Deitel & Deitel
per poi metterli in rete per chi ne ha bisogno.
Ho riscontrato un problema con un semplice esercizio: si tratta di
immettere un valore intero in cifre binarie e convertirlo in valore
decimale.
L'esercizio in se non è difficile, non fosse che non posso per ovvi
motivi utilizzare ad esempio stringhe o vettori ma solamente ciò che fino
a quel punto è stato trattato nel libro (praticamente l'inizio).
Risultato: so benissimo come fare ma non so come fare con gli elementi
che ho a disposizione :)
Ecco il codice:
#include <stdio.h>
int main (void)
{
  int num, i = 1, count = 0, total = 0, j = 10, k = 1, l = 1;
  printf ("Insert a binary number:\n");
  scanf ("%d", &num);
  while (count <= 7)
    {
      i = num % j / l;
      total += i * k;
      j *= 10;
      k *= 2;
      l *= 10;
      ++count;
    }
  printf ("Num = %d\n", num, total);
  return 0;
}
Eccolo: vorrei un vostro parere se possibile soprattutto sulla condizione
del ciclo che non mi soddisfa affatto (ma non ho idea di come
fermarlo...). Oltre al contatore posso utilizzare un valore sentinella
ma... quale? :) Niente cicli for ovviamente, ne getchar()... Scanf,
printf, gli operatori che ho usato, tipi float e int. 
Anche i tipi di dati effettivamente non mi piacciono.
Aggiungendo delle istruzioni printf si vede chiaramente che dopo pochi passaggi j, k, l
sballano (e tanto...).
Questo codice è orribile :(
Grazie dell'attenzione, ciao.
	Nicholas
-- 
   Perhaps the most important achievement of Unix is to demonstrate that a powerful operating
   system for interactive use need not be expensive either in equipment or in human effort:
   it can run on hardware costing as little as $40,000, and less than two man-years were
   spent on the main system software. We hope, however, that users find that the most
   important characteristics of the system are its simplicity, elegance, and ease of use.
						The UNIX Time-sharing System* (1974)
							D.M. Ritchie and K. Thompson

 sballano (e tanto...).
  int num;   // valore inserito dall'utente
  int numCp; // copia valore originale
  int bit;   // bit ricavato
  int val=0; // valore finale
  int mask=1;// maschera binari (2^n)
  printf ("Insert a binary number:\n");
  scanf ("%d", &num);
  numCp=num;
  while (num) {    // quando il numero e zero terminiamo, non ci sono piu
bit.
    bit=num%10;    // determina ultimo bit (processiamo da destra a
sinistra)
    val+=mask*bit; // moltiplica con la maschera (0*mask o 1*mask)
    mask<<=1;      // 2^n --> 2^(n+1)
    num/=10;       // togliamo l'ultimo bit
  }
  printf("%db = %d dec", numCp, val);
si poteva anche eliminare bit (pero' risulta meno chiaro):
  while (num) {
    val+=mask*(num%10);
    mask<<=1;
    num/=10;
  }
HTH
Ju
P.S. Perdonate i comments in C++ style  ;-)