Post con tag unix
Breve tutorial sull’editor VIM
7 giu
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.
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.
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])
I file di lock in Unix
13 feb
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
12 feb
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.
Echo Server in C++
11 feb
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.
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.