C
C/C++: generazione di un numero pseudo-random
5 giu
L’header stdlib.h (cstdlib in C++), contiene al suo interno la funzione:
int rand(void)
che permette la generazione di un numero random, compreso tra 0 e RAND_MAX, che dipende da un seme, definibile attraverso la funzione:
void srand ( unsigned int seed );
C/C++: aggiornamento della percentuale di progresso con il carattere backspace
2 giu
Sebbene il C/C++ non fornisca strumenti (perlomeno portabili) per la gestione della console, possiamo utilizzare il carattere ‘\b’ di backspace per cancellare qualcosa scritto precedentemente e per scriverci di nuovo. Questo può essere utile nella gestione del progresso di un task, ad esempio, mediante la stampa della percentuale.
In questo esempio mostreremo come sovrascrivere la vecchia percentuale stampata a favore della corrente:
Leggere un file al contrario in C
30 apr
La lettura di un file in C avviene in maniera unidirezionale, dall’inizio alla fine. Per leggere un file al contrario, è necessario utilizzare la funzione di posizionamento fseek:
int fseek ( FILE * stream, long int offset, int origin );
dove stream è un puntatore ad un oggetto FILE, offset è l’offset, in byte, da origin.
origin è un intero che rappresenta la posizione. E’ possibile utilizzare le seguenti tre costanti:
SEEK_SET | Inizio del file |
SEEK_END | Fine del file |
SEEK_CUR | Posizione corrente |
Il valore di ritorno della funzione è 0 se ha avuto successo, un valore non nullo altrimenti.
Programmazione multithread in C nei sistemi Unix
31 mar
Lo standard POSIX ha introdotto, nel 1995, delle API per la manipolazione dei thread nei sistemi UNIX.
L’header da includere per utilizzare i thread POSIX è pthread.h e la libreria da linkare è pthread.
Creazione di librerie condivise in Unix con GCC
16 mar
Una libreria condivisa (Shared Library) è un file binario contenente un insieme di funzioni richiamabili o classi.
Esse hanno un nome particolare, detto soname, composto dalle lettere iniziali lib, dal nome della libreria, da .so, da un punto e dal numero della versione.
Conversione da decimale a binario con gli operatori bitwise
13 mar
La conversione di decimale in un numero binario può essere effettuata agevolmente utilizzando gli operatori bitwise and (&) e lo shift a sinistra (<<).
In particolare, per controllare se l’i-esimo bit di numero è uno, possiamo utilizzare l’espressione:
num & (1 << i)
La funzione socketpair
14 feb
I socket locali o Unix domain socket rappresentano un meccanismo di comunicazione tra processi che rimuovono il problema dell’unidirezionalità delle pipe.
Il prototipo della funzione socketpair è il seguente:
int socketpair(int domain, int type, int protocol, int sv[2])
La memoria condivisa in Unix
10 feb
Tra i vari metodi di Interprocess Communication messi a disposizione dai sistemi Unix, c’è da citare la memoria condivisa.
In sostanza un processo crea un segmento di memoria che può essere condivisa da altri processi, i quali possono avere accesso in lettura e scrittura. Per questo motivo, solitamente, la memoria condivisa va accompagnata con un meccanismo di sincronizzazione tra processi.
Le pipe di Unix
8 feb
Le pipe sono uno strumento di comunicazione tra processi (Interprocess Communication) offerti da Unix.
La comunicazione è monodirezionale e avviene sfruttando due file descriptor, uno per la lettura e uno per la scrittura dei dati.
Informazioni di sistema in Unix
7 feb
Lo standard POSIX prevede la funzione uname, definita nell’header sys/utsname.h, per ottenere le informazioni sul sistema corrente.