Tips C et C++
Par PlaceOweb le lundi, mars 14 2011, 20:00 - Système - Lien permanent
Notes d'un ultra débutant C/C++
- FAQ C++ > Entrées / sorties avec les flux > Manipulation des fichiers
- Wikibooks: Programmation C++/Les entrées-sorties
- Lecture et écriture dans les fichiers en C++
- Lire et écrire dans des fichiers
C/C+ écouter un fichier qui change, cpp surveiller les modifications d'un fichier (sous Linux)
Forum des professionnels en informatique > C et C++ > C > Recharger cette page Surveiller l'évolution d'un fichier
inotify_init ajout des fichiers à surveiller avec inotify_add_watch select pour remonter les événements
inotify est un mécanisme du noyau Linux qui fournit des notifications concernant le système de fichiers.
- Intro to inotify
- Inotify : monitorer un fichier ou un répertoire Inotify permet d'être notifié de diverses actions effectuées sur un fichier ou un répertoire. Elles vont de la simple ouverture à son déplacement. Permet de placer un "écouteur" sur un répertoire, un lien symbolique, un fichier spécial, ...
Pour les utilisateurs de PHP vous trouverez la surveillance/notifications de fichiers dans les Fonctions Inotify
- inotify_add_watch — Ajoute un point de surveillance à une instance inotify
- inotify_init — Initialise une instance inotify
- inotify_queue_len — Retourne le nombre d'événements qui sont survenus
- inotify_read — Lit les événements dans une instance inotify
- inotify_rm_watch — Supprime un point de surveillance d'une instance inotify
NOM
inotify_add_watch - Ajouter une surveillance à une instance inotify déjà initialisée
SYNOPSIS
#include <sys/inotify.h>
int inotify_add_watch(int fd, const char *pathname, uint32_t mask);
DESCRIPTION
inotify_add_watch() ajoute un surveillant, ou en modifie un existant, sur le fichier dont le chemin est fournit dans pathname ; l'appelant doit avoir la permission de lecture sur ce fichier. L'argument fd est un descripteur de fichier référençant l'instance inotify dont la liste de surveillance doit être modifiée. Les événements à surveiller sur pathname sont spécifiés dans l'argument masque de bits mask. Voir inotify(7) pour une description des bits qui peuvent être positionnés dans mask.
Un appel réussi à inotify_add_watch() renvoie un descripteur de surveillance unique, associé avec pathname, pour cette instance inotify. Si pathname n'était pas déjà surveillé par cette instance inotify, le descripteur de surveillance est alloué par le noyau. Si pathname était déjà surveillé, le descripteur de la surveillance existante est renvoyé.
Le descripteur de surveillance est renvoyé par des appels ultérieurs à read(2) sur le descripteur de fichier inotify. Ces lectures renvoient des structures inotify_event (voir inotify(7)) indiquant des événements sur le système de fichiers ; le descripteur de surveillance de cette structure identifie l'objet pour lequel cet événement a eu lieu.
VOIR AUSSI
inotify_init(2), inotify_rm_watch(2), inotify(7)
NOM
inotify_init - Initialiser une instance inotify
SYNOPSIS
#include <sys/inotify.h>
int inotify_init(void);
DESCRIPTION
inotify_init() initialise une nouvelle instance inotify et renvoie un descripteur de fichier associé à une nouvelle file d'événements inotify.
VOIR AUSSI
inotify_add_watch(2), inotify_rm_watch(2), inotify(7)
NOM
inotify_rm_watch - Supprime une surveillance existante d'une instance inotify
SYNOPSIS
#include <sys/inotify.h>
int inotify_rm_watch(int fd, uint32_t wd);
DESCRIPTION
inotify_rm_watch() supprime la surveillance associée au descripteur wd de l'instance inotify associée au descripteur de fichier fd.
La suppression d'une surveillance provoque la génération d'un événement IN_IGNORED pour le descripteur. Voir inotify(7).
VOIR AUSSI
inotify_add_watch(2), inotify_init(2), inotify(7)
NOM
inotify - Contrôler les événements des systèmes de fichiers
DESCRIPTION
L'API inotify fournit un mécanisme pour contrôler les événements au niveau des systèmes de fichiers. Inotify peut être utilisé pour contrôler des fichiers individuels ou des répertoires. Quand un répertoire est contrôlé, inotify va signaler des événements pour le répertoire lui-même et pour les fichiers de ce répertoire.
Les appels système suivants sont utilisés avec cette API : inotify_init(2), inotify_add_watch(2), inotify_rm_watch(2), read(2) et close(2).
inotify_init(2) crée une instance inotify et renvoie un descripteur de fichier se référant à cette instance inotify.
inotify_add_watch(2) manipule la « liste de surveillance » associée à une instance inotify. Chaque élément (« watch ») de la liste de surveil- lance spécifie le chemin d'un fichier ou d'un répertoire, avec un ensemble d'événements que le noyau doit contrôler pour le fichier indiqué par ce chemin. inotify_add_watch(2) crée un nouvel élément de surveillance ou modifie un élément existant. Chaque élément a un unique «descripteur de surveillance », un entier renvoyé par inotify_add_watch(2) lorsque cet élément est créé.
inotify_rm_watch(2) retire un élément d'une liste de surveillance inotify.
Quand tous les descripteurs de fichier se référant à une instance inotify ont été fermés, l'objet sous-jacent et ses ressources sont libérés pour être réutilisés par le noyau ; tous les éléments de surveillance associés sont automatiquement libérés.
Pour déterminer quels événements ont eu lieu, une application va lire avec read(2) le descripteur de fichier inotify. Si aucun événement n'a eu lieu, alors, en supposant qu'il s'agisse d'un descripteur de fichier bloquant, read(2) se bloquera jusqu'à ce qu'au moins un événement ait lieu (à moins qu'elle ne soit interrompue par un signal, auquel cas l'appel échouera avec l'erreur EINTR ; voir signal(7)).
Chaque lecture (avec read(2)) réussie renvoie un tampon contenant une ou plusieurs des structures suivantes :
struct inotify_event { int wd; /* Descripteur d'élément de surveillance */ uint32_t mask; /* Masque d'événements */ uint32_t cookie; /* Cookie unique d'association des événements (pour rename(2)) */ uint32_t len; /* Taille du champ name */ char name; /* Nom optionnel terminé par un nul */ };
wd identifie l'élément de surveillance pour lequel cet événement a lieu. Il s'agit de l'un des descripteurs de fichier renvoyés par un précédent appel à inotify_add_watch(2).
mask contient des bits qui décrivent l'événement qui a eu lieu (voyez ci-dessous).
cookie est un entier unique qui relie les événements. Ce n'est actuellement utilisé que pour les événements de renommage, et permet à la paire d'événements IN_MOVE_FROM et IN_MOVE_TO en résultant d'être associés par l'application.
Le champ name n'est présent que lorsqu'un événement est renvoyé pour un fichier au sein d'un répertoire surveillé. Il identifie le chemin du fichier par rapport au répertoire surveillé. Ce chemin est terminé par un caractère nul et peut inclure d'autres octets nuls pour ajuster des lectures successives à une limite d'adressage convenable.
Le champ len compte tous les octets de name, incluant les caractères nuls. La longueur de chaque structure inotify_event vaut donc sizeof(ino- tify_event)+len.
Le comportement lorsque le tampon donné à read(2) est trop petit pour renvoyer l'information sur le prochain événement dépend de la version du noyau : avant 2.6.21, read(2) renvoie 0 ; depuis le noyau 2.6.21, read(2) échoue avec l'erreur EINVAL.
Événements inotify L'argument mask passé à inotify_add_watch(2) et le champ mask de la structure inotify_event renvoyés lors de la lecture avec read(2) d'un descripteur de fichier inotify sont tous deux des bits de masquage identifiant les événements inotify. Les bits suivants peuvent être définis dans l'argument mask lors de l'appel à inotify_add_watch(2) et peuvent être renvoyés via le champ mask retourné par read(2) :
IN_ACCESS Accès au fichier (lecture) (*). IN_ATTRIB Modification des métadonnées, par exemple, les permissions, les horodatages, les attributs étendus, le compteur de liens (depuis Linux 2.6.25), UID, GID, etc. (*). IN_CLOSE_WRITE Fichier ouvert en écriture fermé (*). IN_CLOSE_NOWRITE Fichier non ouvert en écriture fermé (*). IN_CREATE Fichier/rép. créé dans le répertoire surveillé (*). IN_DELETE Fichier/répertoire supprimé dans le répertoire surveillé (*). IN_DELETE_SELF Fichier/répertoire surveillé supprimé. IN_MODIFY Fichier modifié (*). IN_MOVE_SELF Fichier/répertoire surveillé déplacé. IN_MOVED_FROM Fichier déplacé hors du répertoire surveillé (*). IN_MOVED_TO Fichier déplacé dans le répertoire surveillé (*). IN_OPEN Fichier ouvert (*).
Lors de la surveillance d'un répertoire, les événements marqués par un astérisque (*) ci-dessus peuvent avoir lieu pour des fichiers du réper- toire, auquel cas le champ name dans la structure inotify_event renvoyée identifie le nom du fichier dans ce répertoire.
La macro IN_ALL_EVENTS est définie comme un bit de masquage de tous les événements décrits ci-dessus. Cette macro peut être utilisée comme l'argument mask lors de l'appel à inotify_add_watch(2).
Deux macros supplémentaires sont disponibles : IN_MOVE, équivalent à IN_MOVED_FROM|IN_MOVED_TO, et IN_CLOSE, équivalent à IN_CLOSE_WRITE|IN_CLOSE_NOWRITE.
Les bits supplémentaires suivants peuvent être indiqués dans l'argument mask lors de l'appel à inotify_add_watch(2) :
IN_DONT_FOLLOW (depuis Linux 2.6.15) Ne pas déréférencer pathname s'il s'agit d'un lien symbolique. IN_MASK_ADD Ajouter les événements au masque de surveillance de ce fichier s'il existe déjà (au lieu de remplacer le masque). IN_ONESHOT Surveiller pathname jusqu'au premier événement, puis le supprimer de la liste de surveillance IN_ONLYDIR (depuis Linux 2.6.15) Ne surveiller pathname que si c'est un répertoire.
Les bits suivants peuvent avoir été définis dans le champ mask renvoyé par read(2) :
IN_IGNORED Le surveillant a été retiré explicitement (inotify_rm_watch(2)) ou automatiquement (le fichier a été effacé, ou le système de fichiers a été démonté) IN_ISDIR Le sujet de cet événement est un répertoire. IN_Q_OVERFLOW Queue des événements surchargée (wd vaut alors -1). IN_UNMOUNT Le système de fichiers contenant l'objet surveillé a été démonté.
VOIR AUSSI
inotify_add_watch(2), inotify_init(2), inotify_rm_watch(2), read(2), stat(2), Documentation/filesystems/inotify.txt.
NOM
select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - Multiplexage d'entrées-sorties synchrones.
SYNOPSIS
/* D'après POSIX.1-2001 */ #include <sys/select.h>
/* D'après les standards précédents */ #include <sys/time.h> #include <sys/types.h> #include <unistd.h>
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
void FD_CLR(int fd, fd_set *set); int FD_ISSET(int fd, fd_set *set); void FD_SET(int fd, fd_set *set); void FD_ZERO(fd_set *set);
#include <sys/select.h>
int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);
Exigences de macros de test de fonctionnalités pour la glibc (voir feature_test_macros(7)) :
pselect() : _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >=600
DESCRIPTION
select() et pselect() permettent à un programme de surveiller plusieurs descripteurs de fichier, en attendant qu'au moins l'un de ces descrip- teurs soit « prêt » pour une certaine classe d'opérations d'entrée-sortie. Un descripteur de fichier est considéré comme prêt s'il est possible d'effectuer l'opération correspondante (par exemple read(2)) sans bloquer.
VOIR AUSSI
Pour un tutoriel avec des exemples, voir select_tut(2).
D'autres pages ayant un vague rapport : accept(2), connect(2), poll(2), read(2), recv(2), send(2), sigprocmask(2), write(2), epoll(7), time(7)
NOM
read - Lire le contenu d'un fichier.
SYNOPSIS
#include <sys/types.h> #include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
DESCRIPTION
read lit jusqu'à count octets depuis le descripteur de fichier fd dans le buffer pointé par buf. Si count vaut zéro, read renvoie zéro et n'a pas d'autres effets. Si count est supérieur à SSIZE_MAX, le résultat est indéfini.
VALEUR RENVOYÉE
read renvoie -1 s'il échoue, auquel cas errno contient le code d'erreur, et la position de la tête de lecture est indéfinie. Sinon, read renvoie le nombre d'octets lus (0 en fin de fichier), et avance la tête de lecture de ce nombre. Le fait que le nombre renvoyé soit plus petit que le nombre demandé n'est pas une erreur. Ceci se produit à la fin du fichier, ou si on lit depuis un tube ou un terminal, ou encore si read a été interrompu par un signal.
inotify_init
INOTIFY_INIT(2) Manuel du programmeur Linux INOTIFY_INIT(2)
NOM
inotify_init - Initialiser une instance inotify
SYNOPSIS
#include <sys/inotify.h>
int inotify_init(void);
DESCRIPTION
inotify_init() initialise une nouvelle instance inotify et renvoie un descripteur de fichier associé à une nouvelle file d'événements inotify.
VALEUR RENVOYÉE
inotify_init() renvoie un nouveau descripteur de fichier s'il réussit, et -1 en cas d'erreur, auquel cas errno contient le code d'erreur.
ERREURS
EMFILE La limite du nombre total d'instances inotify par utilisateur a été atteinte.
ENFILE La limite du nombre total de fichiers ouverts sur le système a été atteinte.
ENOMEM Pas assez de mémoire pour le noyau.
VERSIONS
Inotify a été intégré dans Linux 2.6.13.
CONFORMITÉ
Cet appel système est spécifique à Linux.
VOIR AUSSI
inotify_add_watch(2), inotify_rm_watch(2), inotify(7)
COLOPHON
Cette page fait partie de la publication 3.07 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anoma- lies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages....
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe Blaess http://www.blaess.fr/christophe/ entre 1996 et 2003, puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006, et mise à disposition sur http://manpagesfr.free.fr/.
Les pages de manuel Linux (man pages) sont la documentation de référence de l'utilisateur du système de type Linux
Rien a voir, juste auditer les modification faites par les utilisateurs sur les fichiers : Linux audit files to see who made changes to a file
Reg Preg PCRE : Les expression régulières en C
#include <regex.h> regex_t preg; const char *str_regex = "/[[:digit:]]{1,}:[[:digit:]]{2}"; err = regcomp (&preg, str_regex, REG_EXTENDED); // int regexec (const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); match = regexec (&preg, str_request, nmatch, pmatch, 0);
- http://nicolasj.developpez.com/arti...
- http://www.developpez.net/forums/d7... les notes pour passer la compilation
- .re_nsub
- .rm_so
- .rm_eo
- http://books.google.fr/books?id=VVUbTZnknFIC&lpg=PT134&ots=cF1gWRF3dU&dq=.rm_so%20.rm_eo%20.re_nsub&pg=PT134#v=onepage&q=.rm_so%20.rm_eo%20.re_nsub&f=false
- regexec() — Execute Compiled Regular Expression
- http://www.linux-france.org/article...
- http://www.linux-kheops.com/doc/man...
- http://souptonuts.sourceforge.net/c...
- http://www.koders.com/cpp/fidBEC1AC...
- http://forum.hardware.fr/hfr/Progra...
- C et C++ > C > Recharger cette page -Résolu- Passage de tableau multi-dimensionnel en paramètre de fonction
Les tableaux en C C++
- Programmation C : Tableaux deux types de tableaux : les tableaux statiques, dont la taille est connue à la compilation, et les tableaux dynamiques, dont la taille est connue à l'exécution. Nous ne nous intéresserons pour l'instant qu'aux tableaux statiques, les tableaux dynamiques seront présentés avec les pointeurs.
- Les tableaux en langage C++
- Le Site du Zéro > Cours > Tutoriels > Programmation > C++ > C++ Notions avancées > Les concepts avancés du C++ > Les tableaux dynamiques
- Vector (C++)
- vector
En vrac
- Le Site du Zéro > Cours > Tutoriels > Programmation > C > [C] Notions avancées > La Programmation Orientée Objet (POO).
- Les classes en C++
- Langages › C++
- Les objets en langage C++ : il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : statique ou dynamique
- Gestion dynamique de la mémoire
- STL Standard Template Library : Comment créer et utiliser un tableau avec std::vector ?
Débuger le seg fault : Segmentation fault / Erreur de segmentation
On débug en lançant le programme dans le debugger:
gdb ./leProgrammeDejaCompilé
Avec Eclipse : CDT
Eclipse CDT : Eclipse C/C++ Development Tools.
Avec Eclipse HELIOS : Eclipse CDT (C/C++ Development Tooling)
- Eclipse CDT P2 Customizations for SDK installation Version: 1.0.0.201102110609
- Eclipse C/C++ Development Tools Version: 7.0.2.201102110609
- GDB Common Version: 7.0.0.201102110609
- Le plug-in CDT pour le développement en C / C++. Le CDT ne fournit pas de compilateur : il est nécessaire d'utiliser un compilateur externe. Le seul compilateur actuellement supporté par le CDT est le célèbre compilateur GCC du projet GNU. D'autres outils du projet GNU sont aussi nécessaires tel que make ou GDB (GNU Debugger). Sous Windows, il vous faudra Cygwin ou MinGW (Minimalist GNU for Windows : un projet open source qui a pour but de fournir un ensemble de fichier en-tête et de bibliothèques pour générer des exécutables natifs sous Windows en utilisant des outils du projet GNU.).
- Comment configurer Eclipse pour C/C++
- How to Configure Eclipse for C/C++
- How to Configure Eclipse for C/C++
- MinGW (Minimalist GNU for Windows)
Ensuite, retrouvez vos compliateurs :
C:\MinGW\bin>g++ g++: no input files
g++
gcc - GNU project C and C++ compiler Synopsis
gcc [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn...] [-pedantic] [-Idir...] [-Ldir...] [-Dmacro[=defn]...] [-Umacro] [-foption...] [-mmachine-option...] [-o outfile] infile...
Only the most useful options are listed here; see below for the remainder. g++ accepts mostly the same options as gcc.
-l library
Search the library named library when linking. (The second alternative with the library as a separate argument is only for POSIX compliance and is not recommended.)
The directories searched include several standard system directories plus any that you specify with -L.
-Ldir
Add directory dir to the list of directories to be searched for -l.
http://ftp.gnome.org/pub/gnome/bina...
Since December 2006 I will do my Win32 builds of GNOME software against an own build of the regex part from a fresh glibc, that provides a DLL called libgnurx-0.dll. I package this as "libgnurx" (a name I just came up with myself). This should hopefully avoid any confusion.
- regex.h GNU Debian vs. regex.h MinGW
- regex.h
- mingw-regex-2.5.1 => UserContributed / regex / mingw-regex-2.5.1 (libgnurx-0.dll ou regex.h) (libgnurx-0.dll utilisé dans le projet Tor : logiciel libre et un réseau ouvert qui vous aide à vous défendre contre une forme de surveillance qui menace les libertés individuelles et la vie privée, les activités et relations professionnelles confidentielles, et la sécurité d'État connue sous le nom d'analyse de trafic)
- MinGW: Porting GNU Regex to Windows
undefined reference to `regcomp'
- Installer MinGW, ou comment faire du gcc sous Windows
- Installer MinGW, ou comment faire du gcc sous Windows (version 2010)
- Installer Boost sous Windows avec MinGW
gcc
GCC, the GNU Compiler Collection The GNU Compiler Collection includes front ends for C, C, Objective-C, Fortran, Java, Ada, and Go, as well as libraries for these languages (libstdc, libgcj,...).
- GNU Compiler Collection, le principal compilateur de langage C et C++ libre. Pour faire référence précisément aux compilateurs de chaque langage, on parle de :
- gcc pour C ;
- G pour [C|http://fr.wikipedia.org/wiki/C%2B%2B] ;
- GNU Debugger (gdb)
- Mode d'emploi de GCC