ÉtiquetteC

Programmation réseau via socket en C

P

Dans ce monde informatique ultra-connecté, il est crucial de savoir comment envoyer et recevoir des données à distance, grâce aux sockets. Dans cet article, nous verrons qu’une socket est essentiellement une « prise » numérique qu’on attache à une adresse locale ou distante afin d’établir une connexion. Nous explorerons aussi l’architecture et les appels systèmes qui nous...

Envoyer et intercepter un signal en C

E

À force d’être confrontés à des segfaults ou a des erreurs de bus, on se sera déjà familiarisé avec l’idée d’un signal informatique. On reçoit un SIGSEGV ou un SIGBUS qui met fin à notre programme sans préavis, sans explications et sans autre recours. Mais qu’est-ce qu’un signal véritablement ? Est-ce juste le bâton de police du système d’exploitation ? Et...

Threads, mutex et programmation concurrente en C

T

Par souci d’efficacité ou par nécessité, un programme peut être construit de façon concurrente et non séquentielle. Grâce à sa programmation concurrente et `a l’aide de ses processus fils ou de ses threads et de ses mutex, il pourra effectuer plusieurs tâches simultanément. Dans un précédent article, nous avons pu comprendre comment créer des processus fils, qui sont une manière...

Errno et la gestion d’erreur en C

E

Détecter les erreurs dans un programme ainsi que leur cause, c’est la base de tout développement informatique. Mais quand une fonction ou un appel système d’une bibliothèque externe échoue, comment peut-on comprendre ce qu’il s’est passé ? Ces fonctions renvoient généralement une valeur de -1 ou NULL, mais elles stockent aussi la raison de leur échec dans errno. Voyons...

Pipe : une méthode de communication inter-processus

P

Par défaut, il est difficile de faire communiquer deux processus entre eux. Comme on l’a vu dans un précédent article, même les processus pères et fils ne partagent pas le même espace mémoire. Il nous faut donc des moyens d’établir une communication inter-processus. Et l’un de ces mécanismes de communication, c’est le pipe. Qu’est-ce qu’un pipe ? Un pipe, ou un...

Manipuler un fichier à l’aide de son descripteur en C

M

Les appels systèmes disponibles en C pour créer ou ouvrir un fichier, le lire, y écrire et le supprimer font toutes usage d’un descripteur de fichier. Avant de pouvoir manipuler des fichiers, nous devons donc découvrir comment le système d’exploitation gère ses références à ces fichiers. Qu’est-ce qu’un descripteur de fichier ? Sur un système de type Unix, un descripteur...

Créer et tuer des processus fils en C

C

Que ce soit pour exécuter un autre programme depuis le notre ou pour exécuter une partie de notre programme en parallèle, il est souvent très utile de créer des processus fils. On peut ensuite patiemment attendre qu’ils finissent leur tâches, ou même, si l’on se sent particulièrement meurtrier, les tuer prématurément ! Alors qu’est-ce exactement qu’un processus ? Comment...

Variables locales, globales et statiques en C

V

Une variable, c’est un nom qu’on donne à un lieu de stockage en mémoire que notre programme peut ensuite manipuler. On peut préciser sa taille et son type en fonction des valeurs qu’elle contiendra (char, int, long). Mais on peut aussi contrôler sa longévité et sa portée lors de sa déclaration. C’est pour cela qu’il nous faut savoir distinguer les variables locales...

Binaire 010 : l’utilité des opérations bitwise et du bit shifting

B

Les ordinateurs ne connaissent qu’une seule langue : le binaire. Nos nombreux langages de programmation nous permettent de donner des instructions dans un format lisible par l’humain. Ces instructions seront ensuite traduites en longues séquences de 0 et de 1. Bien que ce niveau d’abstraction nous est indispensable, il est parfois utile voire bien plus efficace de manipuler les...

Malloc : allouer de la mémoire en C

M

Dans les langages de programmation compilés comme le C, il est souvent intéressant voire nécessaire d’allouer de la mémoire de façon dynamique sur le tas, pour accommoder des variables de grande taille ou de taille incertaine. C’est la fonction malloc qui nous permet de demander au système d’exploitation d’allouer une zone de mémoire à utiliser dans notre programme. Avant...