C

C/C++: generazione di un numero pseudo-random

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 );

Continua >

C/C++: aggiornamento della percentuale di progresso con il carattere backspace

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:

Continua >

Leggere un file al contrario in C

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.

Continua >

Programmazione multithread in C nei sistemi Unix

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.

Continua >

Creazione di librerie condivise in Unix con GCC

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.

Continua >

Conversione da decimale a binario con gli operatori bitwise

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)

Continua >

La funzione socketpair

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])

Continua >

La memoria condivisa in Unix

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.

Continua >

Le pipe di Unix

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.

Continua >

Informazioni di sistema in Unix

Lo standard POSIX prevede la funzione uname, definita nell’header sys/utsname.h, per ottenere le informazioni sul sistema corrente.

Continua >