Post con tag unix

Breve tutorial sull’editor VIM

VI è un editor di testo, disponibile su diverse piattaforme Unix-like, estremamente flessibile, nonstante la sua complessità. Per questo tutorial verrà utilizzato VI Imporved, un editor in gran parte compatibile con VI.

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 >

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 >

I file di lock in Unix

Un semplice metodo di sincronizzazione tra processi è l’utilizzo di file di lock. Nei sistemi Unix/Linux essi vengono generalmente creati nella cartella /var/lock.

Per implementare questa sincronizzazione è possibile utilizzare la funzione open, unita ai flag O_CREAT e O_EXCL, la quale restituisce errore in caso di file esistente.
Il file può essere rimosso tramite unlink:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>

int lock(const char* filename)
{
	return open(filename, O_EXCL | O_CREAT);
}

int unlock(const char* filename)
{
	return unlink(filename);
}

int main()
{
	int fd;
	char* filename = "/var/lock/test.lock";
	char buffer[1024];

	if (lock(filename) == -1)
	{
		perror("[lock]");
		exit(-1);
	}

	do {
		printf("<< ");
		scanf("%s", buffer);
		printf(">> %s\n", buffer);
	} while( strcmp(buffer, "exit") != 0);

	unlock(filename);
}

Se cercheremo di avviare questo programma più volte, ci verrà segnalato un errore, in quanto il file di lock esiste già.

Web Server minimale in C++ su piattaforma Unix/Linux

Un Web Server è un’applicazione che ha il compito di rispondere ad una richiesta da parte di un client, fornendogli solitamente una pagina web.
Il Web Server qui descritto è capace di fornire una pagina statica, se questa è presente, o un messaggio di errore se la pagina non è disponibile (cioè, può rispondere con un codice 200 o con un codice 404).
La sua struttura del è molto simile a quella dell’Echo Server.

Continua >

Echo Server in C++

Il seguente articolo mostra l’implementazione di un echo server in C++ su piattaforma Unix/Linux.
Il server utilizza un processo principale per restare in ascolto di connessioni e un processo separato per ogni connessione aperta.


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 >