Fedora RPM Guide - en to fr translation catalogue (430 entries)

note: Tag: title
en: Programming RPM with C
fr: Programmation RPM avec le <literal>C</literal>

note: Tag: para
en: This chapter covers:
fr: Ce chapitre porte sur :

note: Tag: para
en: Using the RPM C library
fr: l'utilisation de la bibliothèque <literal>C</literal> de RPM

note: Tag: para
en: Setting up a development environment
fr: la définition d'un environnement de développement

note: Tag: para
en: Programming with the RPM C library
fr: la programmation avec la bibliothèque <literal>C</literal> de RPM

note: Tag: para
en: The power of <command>popt</command> for command-line argument processing
fr: la puissance de <package>popt</package> pour le traitement des arguments en ligne de commande

note: Tag: para
en: Comparing package files to installed packages
fr: la comparaison des fichiers paquets avec les paquets installés

note: Tag: para
en: The RPM C library allows you to perform all the operations of the rpm command from within your own C or C++ programs.
fr: La bibliothèque <literal>C</literal> de RPM vous permet de réaliser toute opération de la commande <command>rpm</command> au sein de vos programmes <literal>C</literal> ou <literal>C++</literal>.

note: Tag: para
en: The reason is simple: The rpm command was created using the RPM libraries. These same libraries are available for you to use in your own programs.
fr: La raison en est simple : la commande <command>rpm</command> a été créée à l'aide des bibliothèques RPM. Vous disposez de ces mêmes bibliothèques pour l'écriture de vos propres programmes.

note: Tag: para
en: The rpm command itself is quick and, for the most part, simple. So, why would you want to write RPM programs?
fr: En elle-même, la commande <command>rpm</command> est rapide et, dans la plupart des cas, simple. Donc, pourquoi vouloir écrire des programmes RPM ?

note: Tag: para
en: There are many reasons, some of which are listed here:
fr: Il y a plusieurs raisons à cela ; quelques unes sont listées ici :

note: Tag: para
en: *Speed: If you need to perform a task on many RPM files such as verifying a large set of files, then performing the task from one program will be a lot faster than launching the rpm command for each file.
fr:  * la rapidité : si vous devez réaliser une tâche sur de nombreux fichiers RPM, comme une vérification d'un grand ensemble de fichiers, faire ce travail à l'aide d'un programme est alors bien plus rapide que le lancement de la commande <command>rpm</command> pour chacun des fichiers.

note: Tag: para
en: *Custom options: If you need to do something the rpm command doesn't offer, or doesn't make easy, then you may want to write your own program.
fr:  * la personnalisation d'options : si vous avez besoin de faire une opération que la commande <command>rpm</command> ne propose pas, ou ne fait pas facilement, vous pouvez alors souhaiter écrire votre propre programme.

note: Tag: para
en: *Convenience: If you need to make many packages quickly, with custom options, your best bet may be to create a program suited for your tasks. Before doing this, though, be sure to look into whether writing a shell script will handle your task adequately. You'll find writing RPM shell scripts goes much faster than writing whole programs.
fr:  * la commodité : pour faire beaucoup de paquets rapidement, avec des options personnalisées, le meilleur moyen peut consister à créer un programme adapté à ces tâches. Avant de vous lancer, toutefois, assurez-vous d'avoir examiné si l'écriture d'un script pour interpréteur de commande ne serait pas à même de résoudre votre problème de façon adéquate. Vous devriez trouver que l'écriture de scripts va beaucoup plus vite que celle de programmes complets.

note: Tag: para
en: *Installation programs: The Windows world has standardized on graphical installation programs such as InstallShield or InstallAnywhere. The RPM system, on the other hand, has focused on automated installation with the rpm command. You can combine the best of both worlds by writing a graphical installation program on top of the RPM system.
fr:  * l'écriture d'installateurs : le monde Windows a généralisé l'emploi des programmes graphiques d'installation de logiciels tels que <command>InstallShield</command> ou <command>InstallAnywhere</command>. Le système RPM, de son côté, a ciblé une installation automatisée avec la commande <command>rpm</command>. Vous pouvez combiner le meilleur de ces deux approches en écrivant un programme d'installation avec interface graphique en sur-couche du système RPM.

note: Tag: para
en: *Integration with environments: You may want to better integrate RPM with a Linux desktop environment such as GNOME or KDE.
fr:  * l'intégration des environnements : vous pouvez rechercher une meilleure intégration de RPM dans un environnement bureau comme GNOME ou KDE.

note: Tag: para
en: *Working with other languages: This book covers programming RPM with C, the core language for the library, as well as the Python and Perl scripting languages. You can use the RPM library, though, to help bind with other languages such as Tcl, Ruby, or even C# (especially one of the C# implementations for Linux).
fr:  * le travail avec d'autres langages : cet ouvrage traite de la programmation RPM avec le <literal>C</literal>, langage du cœur de la bibliothèque, ainsi qu'avec les langages de script Python et Perl. Mais vous pouvez également utiliser la bibliothèque RPM pour faire un lien avec d'autres langages comme Tcl, Ruby, ou même <literal>C#</literal> (en particulier une des implémentations du <literal>C#</literal> pour Linux).

note: Tag: para
en: This chapter and the next cover RPM programming. This chapter covers the RPM C programming library, which provides low-level access to RPM functionality. The next chapter covers the RPM Python programming library, which provides a much higher-level of abstraction. If you are attempting to write a complex RPM program, your best bet is to try the Python API first. Even so, there is a lot you can do with the RPM C library.
fr: Ce chapitre et le suivant traitent de la programmation RPM. Le chapitre actuel porte sur la bibliothèque de programmation <literal>C</literal> pour RPM ; elle permet des accès de bas-niveau aux fonctionnalités RPM. Le suivant porte sur la bibliothèque de programmation Python pour RPM, de niveau d'abstraction plus élevé. Si vous vous lancez dans l'écriture d'un programme complexe pour RPM, le meilleur choix est d'essayer l'API Python d'abord. Même s'il est pratiquement possible de tout faire avec la bibliothèque <literal>C</literal> de RPM.

note: Tag: title
en: Programming with the C Library
fr: Programmation avec la bibliothèque en <literal>C</literal>

note: Tag: para
en: RPM C programs are C programs that call on functions in the RPM library, often called rpmlib. To use the rpmlib, you need to set up a C programming environment and install the rpm-devel package.
fr: Les programmes en <literal>C</literal> pour RPM font appel aux fonctions de la bibliothèque RPM, souvent nommée rpmlib. Pour utiliser rpmlib, vous devez mettre en place un environnement de programmation <literal>C</literal> et installer le paquet <package>rpm-devel</package>.

note: Tag: title
en: Setting Up a C Programming Environment
fr: Mettre en place un environnement de programmation <literal>C</literal>

note: Tag: para
en: At the very least, you’ll need a C compiler, gcc, and a text editor. The easiest way to get the C compiler is to install the packages grouped under Software Development with the Red Hat package management tool.
fr: Au strict minimum, vous avez besoin du compilateur <literal>C</literal>, gcc, et d'un éditeur de texte. Le moyen le plus facile pour obtenir le compilateur <literal>C</literal> est d'installer les paquets groupés sous la dénomination Software Development (Développement logiciel) avec l'outil de gestion de paquets Red Hat.

note: Tag: para
en: Cross Reference
fr: Référence croisée

note: Tag: para
en: See <xref linkend="ch-management-software" /> for more on the Red Hat package management tool.
fr: Voyez le <xref linkend="ch-management-software" /> pour plus d'informations sur l'outil de gestion de paquet Red Hat.

note: Tag: para
en: The gcc package requires a number of capabilities. Make sure you install all the necessary packages. Just about every Linux distribution includes gcc and everything you need to develop C programs, so this should not be a problem.
fr: Le paquet <package>gcc</package> exige un certain nombre de fonctionnalités annexes. Assurez-vous d'avoir installé tous les paquets nécessaires. Pratiquement toutes les distributions Linux incorporent <package>gcc</package> et tout ce dont vous avez besoin pour développer des programmes en <literal>C</literal> : cela ne devrait donc pas poser problème.

note: Tag: para
en: For text editors, you can use the vi or emacs text editors, or any of a number of graphical editors such as gedit.
fr: Pour les éditeurs de texte, vous pouvez utiliser <command>vi</command> ou <command>emacs</command>, ou bien l'un des nombreux éditeurs graphiques, comme <command>gedit</command>.

note: Tag: para
en: <xref linkend="ch-development-tools" /> covers Linux text editors and development tools.
fr: Le <xref linkend="ch-development-tools" /> traite des éditeurs de texte Linux et des outils de développement.

note: Tag: para
en: Once you have a C programming environment set up, you next need to get the RPM library for an RPM development environment.
fr: Une fois votre environnement de programmation <literal>C</literal> mis en place, l'étape suivante consiste à récupérer la bibliothèque RPM pour un environnement de programmation RPM.

note: Tag: title
en: Setting Up the RPM Programming Environment
fr: Définir l'environnement de programmation de RPM

note: Tag: para
en: To program with the RPM library, you need to install the rpm-devel package. You must have a version of rpm-devel that matches your version of the rpm package. If you have Red Hat Linux, your installation CDs will also have the version of the RPM development package that corresponds to your system.
fr: Pour programmer avec la bibliothèque RPM, vous devez installer le paquet <package>rpm-devel</package>. La version de <package>rpm-devel</package> doit correspondre à celle du paquet rpm. Si vous êtes sous Linux Red Hat, votre CD d'installation a la version du paquet de développement de RPM en adéquation avec le système.

note: Tag: para
en: Your program should link against the same libraries that are used by the rpm command itself in order to insure compatibility, so make sure that the version of the rpm-devel package matches the rpm package itself. In most cases, the best bet is to use the RPM programs and libraries that come with your version of Linux.
fr: Votre programme doit éditer ses liens vers des bibliothèques identiques à celles utilisées par la commande <command>rpm</command> elle-même pour assurer la compatibilité ; vérifiez donc que la version du paquet <package>rpm-devel</package> corresponde à celle du paquet <package>rpm</package> lui-même. La plupart du temps, la meilleure façon de procéder consiste à utiliser les programmes et les bibliothèques RPM livrées avec votre version de Linux.

note: Tag: para
en: You can also download the rpm packages from ftp://ftp.rpm.org/pub/rpm/dist/. This site includes versions of the RPM libraries going back to 1996, ancient history in terms of Linux.
fr: Vous pouvez aussi télécharger les paquets <package>rpm</package> à partir de ftp://ftp.rpm.org/pub/rpm/dist/. Ce site comporte les versions des bibliothèques RPM depuis 1996, la préhistoire quand on parle de Linux.

note: Tag: para
en: The package you need is rpm-devel. If you installed Red Hat Linux 8.0, the package is rpm-devel-4.1-1.06. This package includes header files, documentation, and libraries.
fr: Le paquet qu'il vous faut se nomme <package>rpm-devel</package>. Si vous travaillez avec Linux Red Hat 8.0, il s'agit du paquet <package>rpm-devel-4.1-1.06</package>. Ce paquet contient les fichiers d'en-tête, la documentation et les bibliothèques.

note: Tag: title
en: Using the RPM Library
fr: Utiliser les bibliothèques RPM

note: Tag: para
en: All C programs using the RPM library need to include the file rpmlib.h, which defines the core data structures, constants, and functions. One thing you’ll quickly note is that the RPM C library accesses RPM data at a very low level. This is one reason why many developers are moving to Python for their RPM programs, since the Python RPM API presents a higher level of abstraction.
fr: Tous les programmes en <literal>C</literal> utilisant la bibliothèque RPM doivent inclure le fichier <filename>rpmlib.h</filename> : il définit les structures de données du cœur, les constantes et les fonctions. Vous remarquerez rapidement que la bibliothèque <literal>C</literal> de RPM accède aux données à un très bas niveau. C'est une des raisons pour lesquelles de nombreux développeurs utilisent Python pour leurs programmes RPM, étant donné que l'API du Python RPM est représentée un plus haut niveau d'abstraction.

note: Tag: para
en: <xref linkend="ch-rpm-programming-python" /> covers programming RPM with Python.
fr: Le <xref linkend="ch-rpm-programming-python" /> traite de la programmation RPM avec Python.

note: Tag: para
en: In addition to rpmlib.h, the header file rpmcli.h defines a high-level API based on the command-line options to the rpm command. (The cli in rpmcli stands for command-line interface.) Table 16-1 lists other important RPM header files that make up the major subsystems of the RPM system.
fr: En plus de <filename>rpmlib.h</filename>, le fichier d'en-tête <filename>rpmcli.h</filename> définit une API de haut niveau fondée sur les options en ligne de commande de la commande <command>rpm</command> (cli dans rpmcli signifie « command-line interface » —interface de ligne de commande—). Le tableau 15-1 liste les autres fichiers d'en-tête importants constituant les sous-systèmes principaux du système RPM.

note: Tag: para
en: Table 16-1 RPM sub-system header files
fr: Tableau 15-1 : fichiers d'en-tête du sous-système RPM

note: Tag: para
en: File
fr: Fichier

note: Tag: para
en: Defines
fr: Définition

note: Tag: para
en: RPM database access
fr: Accès à la base de données RPM

note: Tag: para
en: RPM input/output routines
fr: Routines d'entrées-sorties de RPM

note: Tag: para
en: Command-line option processing
fr: Traiter les options en ligne de commande

note: Tag: para
en: In addition, a number of header files define the major data objects in the RPM system and the functions that operate on these data objects. Table 16-2 lists these header files.
fr: En plus, un certain nombre de fichiers d'en-tête définissent les principaux objets-données du système RPM et les fonctions opérant sur ces objets-données. Le tableau 16-2 liste ces fichiers d'en-tête.

note: Tag: para
en: Table 16-2 RPM data object header files
fr: Tableau 16-2 fichiers d'en-tête des données-objet RPM

note: Tag: para
en: Transaction sets
fr: Ensembles de transactions

note: Tag: para
en: Transaction elements (packages)
fr: Éléments de transaction (paquets)

note: Tag: para
en: Dependency sets
fr: Ensembles de dépendances

note: Tag: para
en: File information
fr: Informations de fichiers

note: Tag: para
en: Package headers
fr: En-têtes de paquets

note: Tag: para
en: All the RPM include files are located in /usr/include/rpm on most versions of Linux.
fr: Tous les fichiers <literal>include</literal> de RPM sont situés dans <filename>/usr/include/rpm</filename> pour la majorité des versions de Linux.

note: Tag: para
en: You can use the rpm command and the queries introduced in <xref linkend="ch-using-rpm-db" /> to determine exactly where the header files are located. Simply execute the following command:
fr: Vous pouvez utiliser la commande <command>rpm</command> et les requêtes traitées au <xref linkend="ch-using-rpm-db" /> pour déterminer où sont exactement situés les fichiers d'en-tête. Exécutez simplement la commande suivante :

note: Tag: para
en: Examine the output of this command for include files.
fr: Examinez la sortie de cette commande concernant les fichiers <literal>include</literal>.

note: Tag: title
en: Compiling and Linking RPM Programs
fr: Compiler et éditer les liens de programmes RPM

note: Tag: para
en: RPM programs using the rpmlib C API are the same as C programs everywhere. You need to include the proper header files that define the API calls you need, and link with the right set of libraries.
fr: Les programmes RPM utilisant l'API <literal>C</literal> de <package>rpmlib</package> sont identiques à des programmes <literal>C</literal> en tout point. Vous devez inclure les fichiers d'en-tête appropriés définissant les appels à l'API dont vous avez besoin et éditer les liens avec l'ensemble correct de bibliothèques.

note: Tag: title
en: Include Files
fr: Fichiers include

note: Tag: para
en: The rpm include files are located in /usr/include/rpm, so you should add this directory to the set of directories that the C compiler looks in for include files with the –I command-line option. For example:
fr: Les fichiers <literal>include</literal> sont situés dans <filename>/usr/include/rpm</filename> ; vous devez donc ajouter ce répertoire à la liste associée à l'option <option>-I</option> en ligne de commande dans laquelle le compilateur <literal>C</literal> recherche les fichiers <literal>include</literal>. Par exemple :

note: Tag: para
en: This also means that you can install the rpm header files in other directories as needed, and just change the –I command-line option.
fr: Cela signifie aussi que vous pouvez installer, si nécessaire, les fichiers d'en-tête de <package>rpm</package> dans d'autres répertoires, en ne modifiant que l'option <option>-I</option> de la ligne de commande.

note: Tag: para
en: To help debug problems, you probably want to add the -Wall (output all warnings) and -g (compile with debugging information). For example:
fr: Pour faciliter les problèmes de débogage, vous pourrez ajouter les options <option>-Wall</option> (affichage de tous les avertissements) et <option>-g</option> (compilation avec l'information de débogage). Par exemple :

note: Tag: title
en: Libraries
fr: Bibliothèques

note: Tag: para
en: The main rpm library is librpm.a, or a shared version of this same library. To do most anything with RPM programming, you need to link in the following libraries, as listed in Table 16-3.
fr: La principale bibliothèque de <package>rpm</package> est <filename>librpm.a</filename>, ou bien une version partagée de la même. Pour la plupart des actions de programmation avec RPM, vous devez éditer les liens avec les bibliothèques suivantes, listées dans le tableau 16-3.

note: Tag: para
en: Table 16-3 Required rpm libraries
fr: Tableau 16-3 : bibliothèques <package>rpm</package> requises

note: Tag: para
en: Library
fr: Bibliothèque

note: Tag: para
en: Usage
fr: Utilité

note: Tag: para
en: Main RPM library
fr: Bibliothèque RPM principale

note: Tag: para
en: RPM database library
fr: Bibliothèque de la base de données RPM

note: Tag: para
en: RPM input/output
fr: Entrées/sorties RPM

note: Tag: para
en: popt
fr: <package>popt</package>

note: Tag: para
en: Command-line option parsing library
fr: Bibliothèque d'analyse des options en ligne de commande

note: Tag: para
en: If you are creating RPMs from your C programs, you also need to link in the rpmbuild library. To compile and link a simple RPM program, you need a command like the following:
fr: Si vous créez des fichiers RPM avec vos programmes <literal>C</literal>, vous devrez aussi éditer les liens avec la bibliothèque <literal>rpmbuild</literal>. Pour compiler et lier un simple programme RPM, vous avez besoin d'une ligne de commande ainsi :

note: Tag: para
en: On some versions of Linux or on other operating systems, you’ll likely need to link a set of helper libraries, as shown following:
fr: Sur certaines versions de Linux ou sur d'autres systèmes d'exploitation, vous devrez vraisemblablement éditer des liens avec un ensemble de bibliothèques utilitaires, comme indiqué ci-après :

note: Tag: para
en: If you have installed the rpm libraries in a non-standard directory, you need to use the –L option to specify where else to look for libraries. For example:
fr: Si vous avez installé les bibliothèques <package>rpm</package> dans un répertoire non-standard, vous devez utiliser l'option <option>-L</option> pour préciser à quel endroit rechercher les bibliothèques. Par exemple :

note: Tag: para
en: The -L option tells the cc compiler to look in the /opt/lib/rpm directory as well as in the standard locations such as /usr/lib.
fr: L'option <option>-L</option> indique au compilateur <command>cc</command> qu'il convient de rechercher les bibliothèques dans le répertoire <filename>/opt/lib/rpm</filename> de même que dans les emplacements habituels comme <filename>/usr/lib</filename>.

note: Tag: para
en: Starting with RPM 4.2, you should just need to link in the rpm library. The other libraries will get pulled in automatically if needed.
fr: Depuis la version 4.2 de RPM, il n'est nécessaire d'éditer les liens qu'avec la bibliothèque <package>rpm</package>. Les autres bibliothèques sont automatiquement incorporées si nécessaire.

note: Tag: title
en: Getting information on your RPM environment
fr: Obtenir des informations à propos de l'environnement RPM

note: Tag: para
en: A large part of the RPM system lies in system-specific configuration, including the platform you are running on, compatible platforms, and locations of various files. The RPM rc and macro systems support hundreds of options tuned to the specifics of your system, and any customizations you have configured.
fr: Une grande partie du système RPM repose sur une configuration particulière du système, y compris celles de la plate-forme sur laquelle vous travaillez, des plates-formes compatibles et des emplacements des divers fichiers. Le <filename>rc</filename> de RPM et les systèmes de macros prennent en charge des centaines d'options réglées en fonction des spécificités de votre système, ainsi que pour toute personnalisation que vous auriez configurée.

note: Tag: para
en: <xref linkend="ch-customizing-rpm" /> covers customizing RPM.
fr: Le <xref linkend="ch-customizing-rpm" /> traite de la personnalisation de RPM.

note: Tag: para
en: Your C programs need to access these RPM system settings to ensure that all data values are properly set up for your system architecture and installation. So, to start an RPM C program, you need to read in all the configuration files. To do this, call rpmReadConfigFiles.
fr: Vos programmes <literal>C</literal> ont besoin d'avoir accès à ces réglages système de RPM pour assurer que toutes les valeurs des données sont convenablement fixées pour l'architecture de votre système et de votre installation. Donc, au lancement d'un programme <literal>C</literal> pour RPM, vous avez besoin de lire tous les fichiers de configuration. Pour ce faire, appelez <function>rpmReadConfigFiles</function>.

note: Tag: para
en: The files parameter holds a colon-delimited list of files that make up your system’s configuration. The target parameter holds the target platform. You can pass NULL for both these parameters to use the RPM defaults, which is generally what you want.
fr: Le paramètre <literal>files</literal> comporte une liste de noms de fichiers séparés par des points-virgules ; ils représentent la configuration de votre système. Le paramètre <literal>target</literal> contient la plate-forme cible. Vous pouvez donner la valeur NULL à ces deux paramètres pour utiliser les valeurs par défaut — votre souhait en règle générale.

note: Tag: para
en: The rpmReadConfigFiles function returns a 0 on success, or –1 on errors.
fr: La fonction <function>rpmReadConfigFiles</function> renvoie <literal>0</literal> en cas de succès, <literal>-1</literal> en cas d'erreur.

note: Tag: para
en: Once you have read in the configuration files, you can access values in the configuration, or print it out.
fr: Une fois les fichiers de configuration lus, vous pouvez, soit avoir accès aux valeurs de configuration, soit les afficher.

note: Tag: title
en: Printing the Configuration
fr: Afficher la configuration

note: Tag: para
en: To print out the configuration, call rpmShowRC.
fr: Pour afficher la configuration, appelez <function>rpmShowRC</function>.

note: Tag: para
en: Pass in an output file to print the configuration to, such as stdout. For example:
fr: Passez un fichier en tant que paramètre de sortie pour y enregistrer la configuration, comme <literal>stdout</literal>. Par exemple :

note: Tag: para
en: The rpmShowRC function always returns 0.
fr: La fonction <function>rpmShowRC</function> renvoie toujours <literal>0</literal>.

note: Tag: para
en: To control some of the output from rpmShowRC, and other RPM library functions, you can set the logging verbosity level by calling rpmSetVerbosity:
fr: Pour contrôler tout ou partie des sorties de <function>rpmShowRC</function>, et autres fonctions de la bibliothèque RPM, vous pouvez fixer le niveau de verbosité de la journalisation en appelant <function>rpmSetVerbosity</function> :

note: Tag: para
en: For example:
fr: Par exemple :

note: Tag: para
en: Table 16-4 lists the verbosity levels from rpmio/rpmmessages.h going from least output to more output.
fr: Le tableau 16-4 liste les niveaux de verbosité selon <filename>rpmio/rpmmessages.h</filename> en allant de la moins à la plus détaillée.

note: Tag: para
en: Table 16-4 Output verbosity levels
fr: Tableau 16-4 : niveaux de verbosité des sorties

note: Tag: para
en: Level
fr: Niveau

note: Tag: para
en: Only critical error conditions and above
fr: Uniquement les conditions d'erreurs critiques et au-delà

note: Tag: para
en: Only error conditions and above
fr: Uniquement les conditions d'erreurs courantes et au-delà

note: Tag: para
en: Only warning conditions and above
fr: Uniquement les conditions d'avertissements et au-delà

note: Tag: para
en: Same as RPMMESS_WARNING
fr: Identique à RPMMESS_WARNING

note: Tag: para
en: Only significant messages
fr: Uniquement les messages significatifs

note: Tag: para
en: Verbose informational messages
fr: Messages d'information verbeux

note: Tag: para
en: Debugging messages, and everything above
fr: Messages de débogage et tout au-delà

note: Tag: para
en: You can put together a simple RPM program such as the one shown in Listing 16-1.
fr: Vous pouvez y associer un simple programme RPM comme celui du listage 16-1.

note: Tag: para
en: Listing 16-1: rpm1.c
fr: Listage 16-1 : rpm1.c

note: Tag: para
en: /* Show the rpmrc settings. */
fr: /* Afficher les paramétrages de rpmrc. */

note: Tag: para
en: printf("Error reading RC files.\n");
fr: printf("Erreur de lecture des fichiers RC.\n");

note: Tag: para
en: printf("Read RC OK\n");
fr: printf("Lecture de RC réussie\n");

note: Tag: para
en: Compile this program with a command like the following:
fr: Compilez ce programme avec une commande telle que la suivante :

note: Tag: para
en: When you run this program, you should see the contents of your configuration printed to the screen.
fr: Quand vous lancez ce programme, vous verrez le contenu de vos paramètres de configuration à l'écran.

note: Tag: title
en: Expanding the Value of Macros
fr: Développer la valeur des macros

note: Tag: para
en: With all the rc and macro configuration files, the RPM system has a lot of values, usually called macros, that you can use to refer to settings. The term macro is used because the values can be more than simple strings. You can have one macro refer to the value of other macros, for example. The basic macro syntax is:
fr: Avec tous les fichiers rc et de configuration de macro, le système RPM dispose d'un ensemble de valeurs, généralement nommées macros, que vous pouvez utiliser pour effectuer des réglages. On utilise le terme macro parce que les valeurs peuvent être plus que de simples chaînes. Une macro peut, par exemple, faire référence à la valeur d'autres macros. La syntaxe de base pour une macro est :

note: Tag: para
en: %name_of_macro
fr: %NOM_DE_MACRO

note: Tag: para
en: Most of the internal RPM macros start with an underscore, _.
fr: La plupart des macros internes de RPM débutent par un souligné, <literal>_</literal>.

note: Tag: para
en: You can expand a macro with the rpm --eval command:
fr: Vous pouvez développer une macro avec la commande <command>rpm --eval</command> :

note: Tag: para
en: You can also refer to a macro using the following syntax:
fr: Vous pouvez également vous référer à une macro en utilisant la syntaxe suivante :

note: Tag: para
en: %{name_of_macro}
fr: %{NOM_DE_MACRO}

note: Tag: para
en: This syntax makes it easier to include a macro in combinations with other text and other macros, since it clearly delineates the macro name.
fr: Cette syntaxe facilite l'inclusion d'une macro en combinaison avec d'autres textes et d'autres macros étant donné que le nom de la macro est clairement délimité.

note: Tag: para
en: <xref linkend="ch-customizing-rpm" /> covers macros in depth. In your C programs, your code will likely need to expand the value of macros to place data in the proper directories, determine the platform architecture, and so on.
fr: Le <xref linkend="ch-customizing-rpm" /> traite des macros dans le détail. Dans vos programmes <literal>C</literal>, votre code aura vraisemblablement besoin de développer les valeurs des macros pour placer les données dans les répertoires appropriés, pour déterminer l'architecture de la plate-forme, etc.

note: Tag: title
en: Expanding Macros in Your Code
fr: Développer des macros dans votre code

note: Tag: para
en: You can use rpmExpand to determine the value of system macros from within your C programs.
fr: Vous pouvez utiliser <function>rpmExpand</function> pour déterminer les valeurs des macros système à l'intérieur de vos programmes en <literal>C</literal>.

note: Tag: para
en: The rpmExpand function can expand the values of one or more macros, returning the expanded value. You can pass a variable number of parameters to rpmExpand, and you must terminate the list with a NULL:
fr: La fonction <function>rpmExpand</function> peut développer les valeurs d'une ou plusieurs macros ; elle renvoie la valeur développée. Vous pouvez passer un nombre variable de paramètres à <function>rpmExpand</function> et vous devez terminer la liste avec NULL :

note: Tag: para
en: You need to free the data returned by rpmExpand by calling free.
fr: Vous devez libérer la mémoire des données renvoyées par <function>rpmExpand</function> par un appel à <function>free</function>.

note: Tag: para
en: The program in Listing 16-2 takes the first command-line argument to your program (after the program name) and expands that argument as a macro.
fr: Le programme listé en 16-2 prend le premier argument en ligne de commande (celui après le nom du programme) et le développe en tant que macro.

note: Tag: para
en: Listing 16-2: rpmexpand.c
fr: Listage 16-2 : rpmexpand.c

note: Tag: para
en: /* Show some macro settings. */
fr: /* Afficher le développement de certaines macros. */

note: Tag: para
en: printf("Value of macro is [%s]\n", value);
fr: printf("La valeur de la macro est [%s]\n", value);

note: Tag: para
en: Compile and link this program as shown previously.
fr: Compilez et éditez les liens de ce programme comme indiqué plus haut.

note: Tag: para
en: When you run this program, pass the name of a macro to expand. For example:
fr: Quand vous lancez ce programme, passez le nom de la macro à développer en paramètre. Par exemple :

note: Tag: para
en: Value of macro is [i386-linux]
fr: La valeur de la macro est [i386-linux]

note: Tag: para
en: You can pass multiple macros together, as shown following:
fr: Vous pouvez passer plusieurs macros en même temps, comme le montre ce qui suit :

note: Tag: para
en: Value of macro is [/usr/src/redhat/BUILD/i386-linux]
fr: La valeur de la macro est  [/usr/src/redhat/BUILD/i386-linux]

note: Tag: para
en: You can verify this program with the rpm --eval command, introduced previously:
fr: Vous pouvez vérifier ce programme avec la commande <command>rpm --eval</command>, précédemment explicitée :

note: Tag: title
en: The Power of popt
fr: La puissance de <package>popt</package>

note: Tag: para
en: Popt provides a powerful command-line processing library, allowing the rpm command to handle a variety of options in a very flexible way. You can use popt alone as a library in its own right, or use it combined with the rpm library to handle command-line options like those of the rpm command.
fr: <package>popt</package> met à votre disposition une bibliothèque pour un puissant traitement de la ligne de commande. Il permet à la commande <command>rpm</command> de manipuler une grande diversité d'options avec un maximum de souplesse. Vous pouvez utiliser <package>popt</package> seul en tant que bibliothèque à part entière ou bien l'utiliser en combinaison avec la bibliothèque <package>rpm</package> pour gérer des options en ligne de commande du type de celles de la commande <command>rpm</command>.

note: Tag: para
en: At its most basic, popt processes the command-line arguments to a C program, traditionally called argc and argv, into an option table that describes and contains all the option values.
fr: À la base, <package>popt</package> traite les arguments en ligne de commande d'un programme en <literal>C</literal>, traditionnellement appelés <literal>argc</literal> et <literal>argv</literal>, dans une matrice d'options qui décrit et contient leurs valeurs.

note: Tag: para
en: The main advantage popt has over simpler libraries such as getopt lies in the ability to handle complex arguments and to define aliases. The rpm command supports three different behaviors for the –i option, depending on the context (install a package, get information on a package as part of a query, and perform the install stage of a source RPM, as part of rpmbuild).
fr: Le principal avantage de <package>popt</package> sur d'autres bibliothèques plus simples, telle que <package>getopt</package>, réside dans sa capacité à manipuler les arguments complexes et à définir des alias. La commande <command>rpm</command> prend en charge trois comportements différents pour l'option <option>-i</option> selon le contexte (installer un paquet, obtenir des informations sur un paquet au titre d'une requête ou réaliser l'étape d'installation d'un RPM source, avec <command>rpmbuild</command>).

note: Tag: para
en: The popt library supports both traditional UNIX short options such as –U and the longer options common for GNU programs, especially on Linux, such as --upgrade. For the popt library, you can define both short and long variants for each option. In addition, command-line options may be individual flags, such as –v for verbose, or options that expect one or more data values as arguments, such as –f, which requires a file name.
fr: La bibliothèque <package>popt</package> prend en charge à la fois les traditionnelles options courtes d'UNIX comme <option>-U</option> et les options longues courantes des programmes GNU, spécialement Linux, comme <option>--upgrade</option>. Avec la bibliothèque <package>popt</package>, vous pouvez définir à la fois une variante courte et une longue pour chaque option. En plus, les options en ligne de commande peuvent être des marqueurs isolés, comme <option>-v</option> pour verbeux, ou des options attendant une ou plusieurs valeurs en tant qu'arguments, comme <option>-f</option> qui demande un nom de fichier.

note: Tag: title
en: Popt aliases
fr: Alias <package>popt</package>

note: Tag: para
en: One of the most powerful features of popt is the ability to define aliases. A popt alias allows you to define one command-line option as an alias for a set of options. As its simplest, the rpm command-line options --upgrade and –U refer to the same action. You could define one as an alias for the other.
fr: Une des fonctionnalités les plus puissantes de <package>popt</package> est la possibilité de définir des alias. Un alias <package>popt</package> vous permet de définir une option en ligne de commande en tant qu'alias d'un ensemble d'options. Pour dire plus simplement, pour <command>rpm</command>, les options en ligne de commande <option>--upgrade</option> ou <option>-U</option> se rapportent à une même action. Vous pouvez définir l'une comme étant un alias de l'autre.

note: Tag: para
en: With rpm, the file /usr/lib/rpm/rpmpopt-4.1 (for RPM version 4.1) defines over 400 lines of popt aliases to configure the rpm command-line options. For example:
fr: Avec <package>rpm</package>, le fichier <filename>/usr/lib/rpm/rpmpopt-4.1</filename> (pour RPM version 4.1) définit plus de 400 lignes d'alias <package>popt</package> pour configurer les options en ligne de commande de <command>rpm</command>. Par exemple :

note: Tag: para
en: --POPTdesc=$"list capabilities required by package(s)"
fr: --POPTdesc=$"lister les fonctionnalités requises par le(s) paquet(s)"

note: Tag: para
en: This example defines rpm --requires as really a query using the --qf or --queryformat options covered in <xref linkend="ch-using-rpm-db" /> .
fr: Dans cet exemple, <command>rpm --requires</command> est défini comme étant en réalité une requête utilisant les options <option>--qf</option> ou <option>--queryformat</option> décrites dans le <xref linkend="ch-using-rpm-db" />.

note: Tag: para
en: See <xref linkend="ch-customizing-rpm" /> for more on defining popt aliases.
fr: Voyez le <xref linkend="ch-customizing-rpm" /> pour plus d'informations à propos des alias <package>popt</package>.

note: Tag: title
en: Programming with popt
fr: Programmer avec <package>popt</package>

note: Tag: para
en: To use popt in your programs, you need to fill in a table of options and then call poptGetContext. The poptGetContext function parses the command-line options and returns a poptContext, an opaque data type that you need to pass as a parameter to a number of popt functions. The poptContext holds the state of your command-line processing. This allows you to call the popt library with multiple sets of arguments. Each set will have an associate poptContext to keep all the data separate.
fr: Pour utiliser <package>popt</package> dans des programmes, vous devez remplir une table d'options; puis appeler <function>poptGetContext</function>. La fonction <function>poptGetContext</function> analyse les options de la ligne de commande et renvoie un <emphasis>poptContext</emphasis>, une donnée de type opaque que vous passerez en paramètre à un certain nombre de fonctions <package>popt</package>. <emphasis>poptContext</emphasis> contient l'état de traitement de votre ligne de commande, ce qui vous permet d'appeler la bibliothèque <package>popt</package> pour plusieurs ensembles de paramètres. Chaque ensemble possédera un <emphasis>poptContext</emphasis> associé pour séparer toutes les données.

note: Tag: para
en: The basic poptGetContext function signature follows:
fr: La signature de base de la fonction <function>poptGetContext</function> est la suivante :

note: Tag: para
en: All the popt functions require the popt.h include file:
fr: Toutes les fonctions <package>popt</package> nécessitent le fichier d'en-tête <filename>popt.h</filename> :

note: Tag: para
en: The flags should be a bitmask of any options you require, including those listed in Table 16-5.
fr: Les marqueurs doivent consister en un masquage de bits de l'option requise, prises parmi celles listées dans le tableau 16-5.

note: Tag: para
en: Table 16-5 Flags for poptGetContext
fr: Tableau 16-5 : marqueurs pour <function>poptGetContext</function>

note: Tag: para
en: Flag
fr: Marqueur

note: Tag: para
en: Meaning
fr: Signification

note: Tag: para
en: Ignore executable expansions
fr: Ignorer les extensions exécutables

note: Tag: para
en: Treat argv[0], the command name, as an option
fr: Traiter argv[0], le nom de la commande, en tant qu'option

note: Tag: para
en: Do not allow options to follow arguments
fr: Ne pas autoriser d'options à la suite des arguments

note: Tag: para
en: When done with a poptContext, you should free it by calling poptFreeContext:
fr: Quand vous en avez terminé avec un poptContext, vous devez le libérer en faisant appel à <function>poptFreeContext</function> :

note: Tag: para
en: The call to poptFreeContext frees up the memory allocated for the context.
fr: Un appel à <function>poptFreeContext</function> rendra disponible la mémoire allouée à ce contexte.

note: Tag: para
en: You can also fill in a poptContext from settings in a file with poptReadConfigFile:
fr: Vous pouvez aussi remplir, avec des paramètres placés dans un fichier, un poptContext à l'aide de la fonction <function>poptReadConfigFile</function> :

note: Tag: title
en: Filling in the Options Table
fr: Remplir la table des options

note: Tag: para
en: You need to pass in a table that defines all the possible options. This table is an array of structures, where each structure defines one option. The format for a single option follows:
fr: Vous devez compléter une table qui définit toutes les options possibles. Cette table est constituée par une suite de structures définissant chacune une option. Le format d'une option prise isolément est le suivant :

note: Tag: para
en: Going through this structure, the longName defines the long version of the option, such as "upgrade" for --upgrade. The shortName defines the short, one-character option, such as 'U' for an option of -U. You can place a null character, '\0', to specify no short option. With the rpm command, the --rebuilddb option has only a long name and not a short name, for example.
fr: Parcourons cette structure : <structfield>longName</structfield> indique le nom la version longue de l'option, comme <literal>upgrade</literal> pour <option>--upgrade</option> ; <structfield>shortName</structfield> définit l'option courte, un caractère, comme <literal>U</literal> pour l'option <option>-U</option>. Vous pouvez mettre le caractère NULL, '<literal>\0</literal>', pour indiquer l'absence d'option courte. Dans la commande rpm, par exemple, l'option <option>--rebuilddb</option> ne possède qu'un nom long (aucun nom court).

note: Tag: para
en: The longName is not preceded by the double minus sign. Similarly, the shortName is not preceded by the single minus sign.
fr: <structfield>longName</structfield> n'est pas précédé par deux tirets, de même que <structfield>shortName</structfield> ne l'est pas par un tiret.

note: Tag: para
en: The descrip field holds a short description of the option and the argDescrip field holds a description of the types of values it expects, or NULL if this option expects no values.
fr: Le champ <structfield>descript</structfield> contient une courte description de l'option et <structfield>argDescrip</structfield> une définition du type de la valeur attendue, ou NULL si l'option ne requiert aucune valeur.

note: Tag: para
en: The argInfo field holds a flag that tells the popt library how to treat the option. At the very least, you need to define the type of the option. You can also define special processing flags. Table 16-6 lists the argument types in the options table.
fr: Le champ <structfield>argInfo</structfield> contient un marqueur indiquant à la bibliothèque <package>popt</package> comment traiter l'option. Au minimum, vous devez définir le type d'option. Mais, vous pouvez aussi définir un marqueur particulier de traitement. Le tableau 16-6 liste les types d'arguments de la table des options.

note: Tag: para
en: Table 16-6 Popt option table argInfo argument types
fr: Tableau 16-6 : types d'argument <structfield>argInfo</structfield> pour la table d'option de <package>popt</package>

note: Tag: para
en: Value
fr: Valeur

note: Tag: para
en: No argument data, just the option such as -v
fr: Aucune donnée d'argument : option isolée, comme <option>-v</option>

note: Tag: para
en: arg treated as string
fr: Argument traité en tant que chaîne

note: Tag: para
en: arg treated as int
fr: Argument traité en tant que nombre entier

note: Tag: para
en: arg treated as long
fr: Argument traité en tant qu'entier long

note: Tag: para
en: arg points to a table
fr: Argument pointant sur une table

note: Tag: para
en: arg points to a callback function
fr: Argument pointant sur une fonction de rappel

note: Tag: para
en: sets translation domain
fr: Fixe un domaine de traduction

note: Tag: para
en: use value of val field for arg
fr: Utiliser la valeur du champ <structfield>val</structfield> comme argument

note: Tag: para
en: arg treated as float
fr: Argument traité en tant que nombre en virgule flottante

note: Tag: para
en: arg treated as double
fr: Argument traité en tant que nombre en virgule flottante double précision

note: Tag: para
en: Use these constants, from the include file popt.h, in place of the actual numbers.
fr: Utilisez ces constantes, définies dans le fichier d'en-tête <filename>popt.h</filename>, au lieu des valeurs numériques.

note: Tag: para
en: Depending on the type you define in the argInfo field, popt will interpret the generic pointer field, arg, in different ways. Using a pointer allows the popt library to automatically update your program variables based on the command-line option settings.
fr: Selon le type que vous définirez dans le champ <structfield>argInfo</structfield>, <package>popt</package> interprétera le champ du pointeur générique, <structfield>arg</structfield>, de manière différente. L'utilisation d'un pointeur permet à la bibliothèque <package>popt</package> de mettre à jour automatiquement les variables du programme selon le paramétrage des options en ligne de commande.

note: Tag: para
en: You can pass NULL for the arg field. In this case, the popt library will not set any values for you.
fr: Vous pouvez passer NULL pour le champ <structfield>arg</structfield>. Dans ce cas, la bibliothèque <package>popt</package> ne déterminera aucune valeur pour vous.

note: Tag: para
en: The POPT_ARG_NONE type indicates that this option has no argument. For example, the -v verbose option has no data. On the other hand, the POPT_ARG_STRING type indicates that the user should provide a string. For example, the -f option to the rpm command is expected to include a string argument, the name of the file to look up.
fr: Le type POPT_ARG_NONE indique que cette option n'attend pas d'argument. Par exemple, l'option verbosité <option>-v</option> ne requiert aucune donnée. D'autre part, le type POPT_ARG_STRING indique que l'utilisateur doit fournir une chaîne. Par exemple, l'option <option>-f</option> de la commande <command>rpm</command> doit être suivie d'un argument chaîne, le nom du fichier à examiner.

note: Tag: para
en: If the argInfo argument type is POPT_ARG_NONE, the popt library will set arg to 1 if the option is present on the command line. You should pass a pointer to an int if you want this set for you.
fr: Si le type de <structfield>argInfo</structfield> est POPT_ARG_NONE, la bibliothèque popt fixera la valeur de <structfield>arg</structfield> à 1 si l'option est présente sur la ligne de commande. Vous devez passer un pointeur sur un entier si vous souhaitez déterminer cette valeur vous-même.

note: Tag: title
en: Popt Callbacks
fr: Fonctions de rappel <package>popt</package>

note: Tag: para
en: The POPT_ARG_CALLBACK type indicates that the arg field holds a function pointer to a callback function of the following type:
fr: Le type POPT_ARG_CALLBACK indique que le champ <structfield>arg</structfield> contient un pointeur sur une fonction de rappel dont la signature est la suivante :

note: Tag: para
en: The callback reason will be one of the following enum values:
fr: Le paramètre <structfield>reason</structfield> de la fonction de rappel sera une des valeurs de l'énumération ci-après :

note: Tag: para
en: The data field holds the value of the descrip field in the poptOption entry. You can cheat and stuff a pointer to arbitrary data into this field.
fr: Le champ <structfield>data</structfield> contient la valeur du champ <structfield>descript</structfield> de la structure poptOption. Vous pouvez tricher et placer un pointeur sur des données arbitraires dans ce champ.

note: Tag: para
en: The callback function is most useful if you are using nested option tables. You can place your processing code for the nested options into a callback.
fr: La fonction de rappel est très utile si vous emboîtez des tables d'options. Vous pouvez mettre le code de traitement des options imbriquées dans une fonction de rappel.

note: Tag: title
en: Special Option Table Flags
fr: Marqueurs pour table d'options spéciales

note: Tag: para
en: In addition to the types in Table 16-6, you can also define special bit flags that define extra processing information for each option. Combine these bit flags with the type values using a logical OR operation:
fr: En plus des types du tableau 16-6, vous pouvez aussi utiliser des marqueurs spéciaux définissant une information de traitement supplémentaire pour chaque option. Combinez ces marqueurs avec les valeurs de type à l'aide d'un OU logique :

note: Tag: para
en: *The POPT_ARGFLAG_ONEDASH flag allows the longName to be used with one or two dashes, such as -upgrade or --upgrade.
fr:  * le marqueur POPT_ARGFLAG_ONEDASH autorise l'utilisation de <structfield>longName</structfield> précédé de un ou deux tirets, comme <option>-upgrade</option> ou <option>--upgrade</option>.

note: Tag: para
en: *For bitmask options, the POPT_ARGFLAG_OR, POPT_ARGFLAG_NOR, POPT_ARGFLAG_AND, POPT_ARGFLAG_NAND, and POPT_ARGFLAG_XOR type flags tell the popt library to apply the given operation, OR, NOR, AND, NAND, or XOR, to the value if set. The POPT_ARGFLAG_NOT flag tells the popt library to negate the value first.
fr:  * pour des options avec masquage de bit, les marqueurs de type POPT_ARGFLAG_OR, POPT_ARGFLAG_NOR, POPT_ARGFLAG_AND, POPT_ARGFLAG_NAND et POPT_ARGFLAG_XOR indiquent à la bibliothèque <package>popt</package> qu'il convient d'appliquer l'opération donnée : OR, NOR, AND, NAND ou XOR à la valeur, si elle est précisée. Le marqueur POPT_ARGFLAG_NOT demande à la bibliothèque <package>popt</package> de nier préalablement la valeur.

note: Tag: para
en: *You can also use the macros POPT_BIT_SET to set a bit and POPT_BIT_CLR to clear a bit.
fr:  * vous pouvez également utiliser les macros POPT_BIT_SET pour activer un bit et POPT_BIT_CLR pour le désactiver.

note: Tag: para
en: *The POPT_ARGFLAG_OPTIONAL flag indicates that the argument value is optional.
fr:  * le marqueur POPT_ARGFLAG_OPTIONAL indique que l'argument est optionnel.

note: Tag: para
en: *The POPT_ARGFLAG_DOC_HIDDEN flag tells popt to hide this option when displaying the help documentation. In other words, this is an internal option.
fr:  * le marqueur POPT_ARGFLAG_DOC_HIDDEN demande à <package>popt</package> de cacher cette option lors de l'affichage de la documentation d'aide. En d'autres termes, il s'agit d'une option interne.

note: Tag: para
en: *The rarely used POPT_ARGFLAG_STRIP flag tells popt to consume an option and ignore it. This option is rarely used.
fr:  * le marqueur POPT_ARGFLAG_STRIP, rarement utilisé, demande à <package>popt</package> d'ôter l'option et de l'ignorer.

note: Tag: para
en: *The POPT_ARGFLAG_SHOW_DEFAULT flag tells popt to show the initial value of the argument for this option as a default when displaying a help message.
fr:  * le marqueur POPT_ARGFLAG_SHOW_DEFAULT demande à <package>popt</package> d'afficher la valeur initiale de l'argument pour l'option en tant que valeur par défaut lors de l'affichage du message d'aide.

note: Tag: title
en: Magic Options
fr: Options magiques

note: Tag: para
en: With RPM programs, developers usually round out the option table with three special options: POPT_AUTOALIAS, POPT_AUTOHELP, and POPT_TABLEEND. The POPT_AUTOALIAS option sets up a table of aliases:
fr: Pour les programmes RPM, les développeurs ont habituellement fait le tour des tables d'options avec trois d'entr'elles. Elles sont particulières. Il s'agit de : POPT_AUTOALIAS, POPT_AUTOHELP et POPT_TABLEEND. La macro POPT_AUTOALIAS définit une table d'alias :

note: Tag: para
en: 0, "Options implemented via popt alias/exec:", NULL },
fr: 0, "Options implémentées avec popt alias/exec :", NULL },

note: Tag: para
en: This option refers to the table, poptAliasOptions. You can use the POPT_ARG_INCLUDE_TABLE argInfo type to include another table of options. These options get filled in from popt aliases. In addition, within RPM programs, another table, rpmcliAllPoptTable, holds a set of options common to all RPM programs.
fr: Cette option fait référence à la table <emphasis>poptAliasOptions</emphasis>. Vous pouvez utiliser pour <structfield>argInfo</structfield> le type <type>POPT_ARG_INCLUDE_TABLE</type> pour incorporer une autre table d'options. Ces options sont automatiquement complétées par les alias <package>popt</package>. En plus, dans les programmes RPM, une autre table, <emphasis>rpmcliAllPoptTable</emphasis>, contient un ensemble d'options communes à tous les programmes RPM.

note: Tag: para
en: The POPT_AUTOHELP option supports standard help options. The POPT_AUTOHELP macro adds in automatic support for -?, --help, and --usage options.
fr: L'option <option>POPT_AUTOHELP</option> prend en charge les options d'aide standard. La macro POPT_AUTOHELP ajoute automatiquement la prise en charge des options <option>-?</option>, <option>--help</option> et <option>--usage</option>.

note: Tag: para
en: 0, "Help options:", NULL },
fr: 0, "Options d'aide :", NULL },

note: Tag: para
en: The POPT_TABLEEND option defines an empty option to mark the end of the table. You must include an empty option to end the table, and POPT_TABLEEND makes this easy.
fr: L'option  <option>POPT_TABLEEND</option> définit une option vide pour marquer la fin de la table. Il faut l'incorporer pour mettre un point final à la table, et <option>POPT_TABLEEND</option> facilite la chose.

note: Tag: para
en: The code in Listing 16-3, in the "Running a Popt Example" section later in this chapter, shows a full option table.
fr: Le code du listage 16-3, dans le paragraphe « Lancer un exemple de <package>popt</package> » ci-après dans ce chapitre, affiche une table d'options complète.

note: Tag: title
en: Parsing the Command-Line Options
fr: Analyser les options en ligne de commande

note: Tag: para
en: Once you have set up a poptGetContext, you need to iterate over all the command-line parameters. To do this, call poptGetNextOpt:
fr: Une fois un <type>poptGetContext</type> défini, il faut parcourir tous les paramètres de la ligne de commande. Pour ce faire, faites appel à <function>poptGetNextOpt</function> :

note: Tag: para
en: If an error occurs, poptGetNextOpt returns a negative error code. If the context is at the end of the options, poptGetNextOpt returns –1. Table 16-7 lists the error codes:
fr: Si une erreur survient, <function>poptGetNextOpt</function> renvoie un code d'erreur négatif. Quand la fonction arrive à la dernière option,  <function>poptGetNextOpt</function> renvoie <literal>-1</literal>. Le tableau 16-7 liste les codes d'erreurs :

note: Tag: para
en: Table 16-7 Error codes from poptGetNextOpt
fr: Tableau 16-7 : codes d'erreur de <function>poptGetNextOpt</function>

note: Tag: para
en: Option requires an argument, but it is missing
fr: L'option requiert un argument, mais il est absent

note: Tag: para
en: Argument could not be parsed
fr: L'argument ne peut pas être analysé

note: Tag: para
en: Aliases are nested too deeply
fr: Les alias sont trop profondément imbriqués

note: Tag: para
en: Start and end quotation marks don't match
fr: Les guillemets ouvrants ou fermants ne correspondent pas

note: Tag: para
en: Argument could not be converted to a number
fr: L'argument n'est pas convertible en nombre

note: Tag: para
en: Argument number was too big or too small
fr: L'argument nombre est, soit trop grand, soit trop petit

note: Tag: para
en: A system call returned an error in errno
fr: Un appel système a renvoyé une erreur numéro errno

note: Tag: title
en: Walking Through the Command-Line Options
fr: Se déplacer parmi les options en ligne de commande

note: Tag: para
en: In normal circumstances, poptGetNextOpt parses all the options and returns –1. If your needs are simple, you can use the pointers to the variables passed in the options table, described previously. If you need some special processing for options not handled by popt, that is, options of type POPT_ARG_NONE, then poptGetNextOpt returns the single-character option.
fr: Normalement, <function>poptGetNextOpt</function> analyse toutes les options et renvoie <literal>-1</literal>. Si vos besoins sont courants, vous pouvez utiliser les pointeurs sur variables passés dans la table des options, précédemment décrite. Si vous avez besoin d'un traitement particulier pour des options non gérées par <package>popt</package>, c'est à dire d'options du type POPT_ARG_NONE, dans ce cas <function>poptGetNextOpt</function> renvoie l'option à caractère unique.

note: Tag: para
en: In this case, you can call poptGetNextOpt in a while loop. For example:
fr: Dans ce cas, vous pouvez appeler <function>poptGetNextOpt</function> dans une boucle <literal>while</literal>. Par exemple :

note: Tag: para
en: /* Do something... */
fr: /* Faire quelque-chose... */

note: Tag: para
en: Inside your while loop, you can call poptGetOptArg to get the value of the argument:
fr: Dans la boucle <literal>while</literal>, vous pouvez appeler <function>poptGetOptArg</function> pour obtenir la valeur de l'argument :

note: Tag: para
en: You can restart the processing of the options by calling poptResetContext:
fr: Vous pouvez reprendre le processus de traitement des options au début avec un appel à <function>poptResetContext</function> :

note: Tag: para
en: The popt system is just looking for arguments that start with a dash, -. In most command-line applications, you may have a number of extra arguments at the end, such as a list of file names. The popt library doesn’t process these, but can provide them to you.
fr: Le système <package>popt</package> n'examine que les options débutant par un tiret, <literal>-</literal>. Dans de nombreuses lignes de commande d'applications, vous pouvez avoir un certain nombre d'arguments supplémentaires en fin de ligne : une liste de noms de fichiers par exemple. La bibliothèque <package>popt</package> ne les traite pas, mais elle peut vous les fournir.

note: Tag: para
en: Call poptGetArg to return the next extra argument:
fr: Appelez <function>poptGetArg</function> pour le renvoi de l'argument supplémentaire qui suit :

note: Tag: para
en: Keep calling this function until it returns NULL.
fr: Continuez d'appeler cette fonction jusqu'à ce qu'elle renvoie NULL.

note: Tag: para
en: Call poptPeekArg to look at the next argument but not mark it as being processed:
fr: Appelez <function>poptPeekArg</function> pour examiner l'argument suivant, mais sans le marquer traité :

note: Tag: para
en: Or, you can get the whole list of extra arguments by calling poptGetArgs:
fr: Ou bien, vous pouvez obtenir la liste complète des arguments supplémentaires en appelant <function>poptGetArgs</function> :

note: Tag: title
en: Handling Errors
fr: Gérer les erreurs

note: Tag: para
en: Inside your while loop processing the command-line arguments, you can call poptBadOption to get the option that was bad, and poptStrerror to look up the error message associated with the error.
fr: Dans la boucle <literal>while</literal> de traitement des arguments en ligne de commande, vous pouvez appeler <function>poptBadOption</function> pour obtenir la mauvaise option et <function>poptStrerror</function> pour voir le message d'erreur associé.

note: Tag: para
en: For poptBadOption, you need to pass in the context, and a bitmask of flags. Normally, pass 0 for no flags or POPT_BADOPTION_NOALIAS, which tells popt to return the actual option, not a value defined in an alias. This makes poptBadOption return the option closest to, if not exactly the same as, what the user entered, which makes for better error reporting.
fr: Vous devez passer le contexte en paramètre à la fonction <function>poptBadOption</function>, ainsi qu'un masque de bit comme marqueur. Généralement, vous passez <literal>0</literal> pour indiquer <emphasis>pas de</emphasis> marqueur ou bien POPT_BADOPTION_NOALIAS, qui demande à <package>popt</package> de renvoyer l'option vraie et non une valeur définie en alias. <function>poptBadOption</function> renvoie alors l'option parente, même si elle n'est pas exactement identique à celle entrée par l'utilisateur, pour améliorer le rapport d'erreur.

note: Tag: para
en: The poptBadOption function signature follows:
fr: Voici la signature de la fonction <function>poptBadOption</function> :

note: Tag: para
en: Pass the error number returned by poptGetOptArg to poptStrerror to get the standard error message for that option:
fr: Passez le numéro d'erreur renvoyé par <function>poptGetOptArg</function> à <function>poptStrerror</function> pour obtenir le message standard d'erreur pour cette option :

note: Tag: para
en: You can combine these and print out an error with code like the following:
fr: Vous pouvez les combiner et afficher une erreur avec son code comme suit :

note: Tag: para
en: fprintf( stderr, "Error with option [%s]\n %s",
fr: fprintf( stderr, "Erreur avec l'option [%s]\n %s",

note: Tag: para
en: To print out a usage message, call poptPrintUsage:
fr: Pour afficher un message concernant l'utilisation, appelez <function>poptPrintUsage</function> :

note: Tag: para
en: This function prints out the usage help information, which is a useful function when the user has called a program with incomplete or wrong options.
fr: Cette fonction affiche l'information d'aide à propos de l'utilisation du programme ; cette fonction trouve son utilité quand l'utilisateur appelle un programme avec des options incomplètes ou erronées.

note: Tag: title
en: Running a popt example
fr: Lancer un exemple de <package>popt</package>

note: Tag: para
en: Pulling this all together, you can use the popt1.c program, in Listing 16-3, as an example for using popt to process command-line options.
fr: Pour tout mettre ensemble, voyez le programme popt1.c, dans le listage 16-3, comme exemple d'utilisation de <package>popt</package> pour traiter les options en ligne de commande.

note: Tag: para
en: Listing 16-3: popt1.c
fr: Listage 16-3 : popt1.c

note: Tag: para
en: /* Processes command-line options. */
fr: /* Traitement d'options en ligne de commande. */

note: Tag: para
en: /* Data values for the options. */
fr: /* Valeurs des données pour les options. */

note: Tag: para
en: printf("\t Callback in pre setting\n"); break;
fr: printf("\t Fonction de rappel pour configuration préalable\n"); break;

note: Tag: para
en: printf("\t Callback in post setting\n"); break;
fr: printf("\t Fonction de rappel pour configuration différée\n"); break;

note: Tag: para
en: printf("\t Callback in option setting\n"); break;
fr: printf("\t Fonction de rappel pour configuration d'option\n"); break;

note: Tag: para
en: /* Set up a table of options. */
fr: /* Définir une table d'options. */

note: Tag: para
en: (const) "follow with an integer value", (const) "2, 4, 8, or 16" },
fr: (const) "suivi d'un entier", (const) "2, 4, 8 ou 16" },

note: Tag: para
en: (const) "follow with a file name", NULL },
fr: (const) "suivi d'un nom de fichier", NULL },

note: Tag: para
en: (const) "send output to the printer", NULL },
fr: (const) "envoie la sortie à l'imprimante", NULL },

note: Tag: para
en: /* Print out option values. */
fr: /* Afficher les valeurs des options. */

note: Tag: para
en: printf("After processing, options have values:\n");
fr: printf("Après traitement, les options ont les valeurs :\n");

note: Tag: para
en: printf("\t intVal holds %d\n", intVal);
fr: printf("\t intVal contient %d\n", intVal);

note: Tag: para
en: printf("\t print flag holds %d\n", print);
fr: printf("\t le marqueur print contient %d\n", print);

note: Tag: para
en: printf("\t stringVal holds [%s]\n", stringVal);
fr: printf("\t stringVal contient [%s]\n", stringVal);

note: Tag: para
en: This example defines a callback but otherwise uses the simplest case for processing the command-line options. This program lets the popt library simply set the values into the option table. In most cases, you should avoid more complex command-line processing.
fr: Cet exemple de programme définit une fonction de rappel, mais met en œuvre aussi le cas le plus simple de traitement des options en ligne de commande. Il laisse la bibliothèque <package>popt</package> fixer les valeurs dans la table des options. Dans la plupart des cas vous échapperez à des traitements de la ligne de commande plus complexes.

note: Tag: para
en: To compile popt programs, you just need the popt library. For example:
fr: Pour compiler les programmes <package>popt</package>, vous avez uniquement besoin de la bibliothèque popt. Par exemple :

note: Tag: para
en: When you run this program, try out the different options. For example, when you set all the options, you’ll see output like the following:
fr: Si vous lancez ce programme, testez les diverses options. Par exemple, en précisant toutes les options, vous obtiendrez une sortie telle que la suivante :

note: Tag: para
en: $ ./popt1 -i 42 --print -f filename1
fr: $ ./popt1 -i 42 --print -f nom_de_fichier1

note: Tag: para
en: Callback in option setting
fr: Fonction de rappel pour configuration d'option

note: Tag: para
en: Callback in post setting
fr: Fonction de rappel pour configuration différée

note: Tag: para
en: After processing, options have values:
fr: Après traitement, les options ont les valeurs :

note: Tag: para
en: intVal holds 42
fr: intVal contient 42

note: Tag: para
en: print flag holds 1
fr: le marqueur print contient 1

note: Tag: para
en: stringVal holds [filename1]
fr: stringVal contient [nom_de_fichier1]

note: Tag: para
en: This command used two short options and one long. You can mix and match short and long options, as shown following:
fr: Cette commande a utilisé deux options courtes et une option longue. Vous pouvez mélanger et mettre en correspondance les options courtes et longues, comme le montre ce qui suit :

note: Tag: para
en: $ ./popt1 --int 42 -p --file filename1
fr: $ ./popt1 --int 42 -p --file nom_de_fichier1

note: Tag: para
en: This example used a short option for print, -p, and long options for the other two options. The popt library also provides handy help and usage messages, using the option table macro POPT_AUTOALIAS. To get a help message, use --help or -?:
fr: Cet exemple utilise une option courte pour print, <option>-p</option>, et des options longues pour les deux autres. La bibliothèque <package>popt</package> met à disposition des messages pratiques d'aide et d'utilisation, en utilisant la macro de la table d'option POPT_AUTOALIAS. Pour obtenir un message d'aide, utilisez <option>--help</option> ou <option>-?</option> :

note: Tag: para
en: -i, --int=2, 4, 8, or 16 follow with an integer value
fr: -i, --int=2, 4, 8 ou 16 suivi d'une valeur entière

note: Tag: para
en: -f, --file=STRING follow with a file name
fr: -f, --file=<replaceable>CHAINE</replaceable> suivi d'un nom de fichier

note: Tag: para
en: -p, --print send output to the printer
fr: -p, --print envoie la sortie à l'imprimante

note: Tag: para
en: Options implemented via popt alias/exec:
fr: Options implémentées par l'intermédiaire de <emphasis>popt alias/exec</emphasis> :

note: Tag: para
en: Help options:
fr: Options d'aide:

note: Tag: para
en: -?, --help Show this help message
fr: -?, --help affiche ce message d'aide

note: Tag: para
en: --usage Display brief usage message
fr: --usage affiche un court message à propos de l'utilisation

note: Tag: para
en: Notice how the help descriptions from the options table are used.
fr: Notez comment les descriptions d'aide de la table des options sont utilisées.

note: Tag: para
en: With some shells, especially the tcsh shell, you need to wrap a -? In single quotes. For example:
fr: Avec certains interpréteurs, en particulier <command>tcsh</command>, vous devrez entourer <option>-?</option> par des apostrophes (guillemets simples anglais). Par exemple :

note: Tag: para
en: The usage message is shorter, and you also get it for free:
fr: Le message d'utilisation est plus court, aussi nous vous l'offrons en prime :

note: Tag: para
en: All in all, the popt library provides a handy library for processing command-line options and aliases, covered in <xref linkend="ch-customizing-rpm" />.
fr: Somme toute, la bibliothèque <package>popt</package> met à disposition une bibliothèque pratique pour le traitement des options en ligne de commande et des alias, voyez le <xref linkend="ch-customizing-rpm" />.

note: Tag: title
en: Handling rpm command-line options
fr: Traitement des options en ligne de commande de <command>rpm</command>

note: Tag: para
en: The RPM C library makes extensive use of popt for processing command-line arguments. Functions that set up the RPM library, such as rpmcliInit, which sets up the RPM command-line environment, require a table of poptOption entries that define the command-line options for your program.
fr: La bibliothèque <literal>C</literal> de RPM permet une extension de l'utilisation de <package>popt</package> pour traiter des arguments en ligne de commande. Des fonctions constitutives de la bibliothèque RPM, comme <command>rpmcliInit</command> fixant les paramètres d'environnement de la ligne de commande RPM, demandent une table d'entrées poptOption définissant les options en ligne de commande de votre programme.

note: Tag: para
en: To create a simple program that handles the standard rpm command-line options, set up the following options table:
fr: Pour créer un simple programme qui gère les options standard de la ligne de commande, définissez la table d'options suivante :

note: Tag: para
en: "Common options for all rpm modes and executables:",
fr: "Options communes à tous modes et exécutables rpm :",

note: Tag: para
en: Then, initialize your program with a call to rpmcliInit:
fr: Ensuite, initialisez votre programme par un appel à <function>rpmcliInit</function> :

note: Tag: para
en: When you call rpmcliInit, it will set up all the variables for the standard rpm command-line options.
fr: Lors de l'appel de <function>rpmcliInit</function>, celui-ci définit toutes les variables des options standards en ligne de commande pour <command>rpm</command>.

note: Tag: para
en: For example, to see if the verbose flag is turned on, call rpmIsVerbose:
fr: Par exemple, pour voir si le marqueur de verbosité est activé, appelez <function>rpmIsVerbose</function> :

note: Tag: para
en: When you are done with a program that called rpmcliInit, call rpmcliFini to clean up the global data:
fr: Quand vous en avez terminé avec un programme qui a fait appel à <function>rpmcliInit</function>, appelez <function>rpmcliFini</function> pour nettoyer les données globales :

note: Tag: para
en: The call to rpmcliFini returns NULL.
fr: L'appel à <function>rpmcliFini</function> renvoie NULL.

note: Tag: title
en: Working with RPM Files
fr: Travailler avec les fichiers RPM

note: Tag: para
en: The RPM C library provides functions to read RPM files as well as query the RPM database. Going beyond querying, you can perform all the tasks that the rpm and rpmbuild commands do, since both these commands are written in C using the RPM library. That said, some tasks are much easier than other tasks. If you are writing a complex package installation program, or a program that keeps various systems up to date with regards to package versions, you may want to look at the Python RPM API instead of the C RPM library.
fr: La bibliothèque <literal>C</literal> de RPM fournit des fonctions pour lire des fichiers RPM tout comme pour questionner la base de données RPM. Au delà de simples requêtes, vous pouvez réaliser toutes les tâches qu'effectuent les commandes <command>rpm</command> et <command>rpmbuild</command>, car ces deux commandes sont écrites en <literal>C</literal> à l'aide de la bibliothèque RPM. Ceci dit, certaines tâches seront plus faciles que d'autres. Si vous écrivez un programme complexe d'installation de paquet, ou un programme qui maintient les divers systèmes à jour selon les versions de paquet, vous devriez chercher plutôt du côté de l'API Python de RPM plutôt que de la bibliothèque <literal>C</literal> de RPM.

note: Tag: para
en: <xref linkend="ch-rpm-programming-python" /> covers the Python RPM API.
fr: Le <xref linkend="ch-rpm-programming-python" /> traite de l'API Python de RPM.

note: Tag: title
en: Opening RPM files
fr: Ouvrir des fichiers RPM

note: Tag: para
en: When working with an RPM file from within a program, the first thing you need to do is open the file. Use Fopen:
fr: Pour travailler sur un fichier RPM à partir d'un programme, la première chose à faire est d'ouvrir le fichier. Utilisez <function>Fopen</function> :

note: Tag: para
en: Fopen works like the standard C function fopen(3).
fr: <function>Fopen</function> fonctionne comme la fonction <literal>C</literal> standard <function>fopen(3)</function>.

note: Tag: para
en: The reason the RPM library wraps the input/output C library functions is to ensure portability to other operating systems. This is a fairly common technique.
fr: La bibliothèque RPM redéfinit les fonctions d'entrée/sortie de la bibliothèque <literal>C</literal> pour garantir la portabilité sur d'autres systèmes d'exploitation. C'est une technique assez courante.

note: Tag: title
en: Reading the RPM lead and signature
fr: Lire l'introduction RPM et la signature

note: Tag: para
en: Once you have opened an RPM file, you can start to read header information, which is the most interesting information to most RPM programs. (You may also want to read the files in the RPM payload, for example.) Before you can start reading the header, though, you must read forward in the RPM file past the lead and signature.
fr: Une fois le fichier RPM ouvert, vous pouvez débuter la lecture des informations d'en-tête : ce sont les plus intéressantes dans la plupart des programmes RPM (vous pouvez aussi vouloir connaître les fichiers du chargement utile du RPM, par exemple). Mais avant de pouvoir commencer cette lecture de l'en-tête, vous devez vous placer plus avant dans le fichier RPM — après l'introduction et la signature.

note: Tag: para
en: <xref linkend="ch-rpm-overview" /> introduces the lead and signature.
fr: Le <xref linkend="ch-rpm-overview" /> traite de l'introduction et de la signature.

note: Tag: para
en: Even if your programs don’t want to examine the lead or signature, you must read past to position the file offset properly for reading the header information. To read past the lead, call readLead:
fr: Même si vos programmes n'ont pas besoin d'examiner l'introduction ou la signature, vous devez lire plus avant pour positionner correctement le décalage du pointeur de fichier pour lire l'information d'en-tête. Pour lire au-delà de l'introduction, appelez <function>readLead</function> :

note: Tag: para
en: The readLead function returns 0 on success or 1 on an error. It fills in an rpmlead struct:
fr: La fonction <function>readLead</function> renvoie <literal>0</literal> si succès ou <literal>1</literal> si erreur. Elle remplit une structure rpmlead :

note: Tag: para
en: To read past the signature, call rpmReadSignature:
fr: Pour lire au-delà de la signature, appelez <function>rpmReadSignature</function> :

note: Tag: para
en: The return code is one of the values listed in Table 16-8.
fr: Le code de retour est une des valeurs listées dans le tableau 16-8.

note: Tag: para
en: Table 16-8 Return codes from rpmReadSignature
fr: Tableau 16-8 : codes de retour de <function>rpmReadSignature</function>

note: Tag: para
en: You can do more with the signature than merely reading past it, of course. Look in the online RPM documentation for more on verifying signatures.
fr: Il y a, bien entendu, plus à faire avec la signature que de lire uniquement les informations qui la suivent. Regardez la documentation en ligne de RPM pour plus d'informations sur la vérification des signatures.

note: Tag: para
en: After reading the signature, you can start to read the general header entries.
fr: Après avoir lu la signature, vous pouvez commencer à lire les entrées de l'en-tête général.

note: Tag: title
en: Reading header information
fr: Lire les informations de l'en-tête

note: Tag: para
en: The header information includes the package name, version, pre- and post-installation scripts, and so on. To read in the RPM header, call headerRead. If successful, headerRead returns a Header object. You can then read data values from the Header.
fr: Les information de l'en-tête comprennent le nom du paquet, la version, les scripts lancés avant et après installation, etc. Pour lire dans l'en-tête RPM, appelez <function>headerRead</function>. Si succès, <function>headerRead</function> renvoie un objet Header. Vous pourrez alors lire les valeurs des données à partir de cet objet.

note: Tag: para
en: When working with the RPM database, you will also use Header objects.
fr: Pour travailler avec la base de données RPM, vous utiliserez aussi les objets Header.

note: Tag: para
en: The trickiest thing about calling headerRead is that you must pass a special magic number flag. This value must be HEADER_MAGIC_YES if the header has a set of magic numbers, and HEADER_MAGIC_NO if not. If you guess incorrectly, headerRead will return an error. To get around, this, you can compare the major number in the lead. For example:
fr: La chose la plus embêtante dans l'appel de la fonction <function>headerRead</function> est que vous devez passer en paramètre un marqueur spécial nombre magique. Cette valeur doit être HEADER_MAGIC_YES si l'en-tête dispose d'un jeu de nombres magiques ou HEADER_MAGIC_NO dans le cas contraire. Si vous ne faites pas la bonne supposition, <function>headerRead</function> renvoie une erreur. Pour contourner cela, vous pouvez comparer le numéro majeur dans l'en-tête. Par exemple :

note: Tag: para
en: This snippet is one of the gems you'll find when you browse the RPM source code. Use the source.
fr: Ce petit morceau est une des perles que vous trouvez quand vous parcourez le code source de RPM. Utilisez les sources.

note: Tag: para
en: To read values from the Header, call headerGetEntry. To call headerGetEntry, you pass in a Header and a tag ID. You get back the type of the tag, a pointer to the tag values, and a count of the number of values stored under this tag.
fr: Pour lire des valeurs de l'en-tête, appelez <function>headerGetEntry</function>. Pour cet appel, passez comme paramètre la structure Header et l'identifiant d'une marque. En retour, vous obtiendrez le type correspondant à la marque, un pointeur sur les valeurs de la marque et un décompte du nombre de valeurs sous cette marque.

note: Tag: para
en: The call to headerGetEntry returns a 1 on success, or a 0 on failure. On success, the pointer will point at the retrieved data, with the type parameter set to one of the following enum values:
fr: L'appel à <function>headerGetEntry</function> renvoie <literal>1</literal> en cas de succès, <literal>0</literal> en cas d'échec. En cas de succès, le pointeur donnera l'adresse des données retrouvées et le paramètre de type sera fixé à l'une des valeurs de l'énumération suivante :

note: Tag: para
en: If the type is RPM_STRING_ARRAY_TYPE or RPM_BIN_TYPE, you must free the pointer. Call headerFreeData to free the data:
fr: Si le type est RPM_STRING_ARRAY_TYPE ou RPM_BIN_TYPE, vous devez libérer le pointeur. Faites appel à  <function>headerFreeData</function> pour l'effectuer :

note: Tag: para
en: You need to pass in the data pointer and the type flag. You can safely call headerFreeData for all types. The function will do nothing if the type is not set up to require freeing.
fr: Vous devez passer en paramètre le pointeur sur les données et le marqueur de type. Vous pouvez appeler <function>headerFreeData</function> en toute sécurité pour tous les types. La fonction ne fait rien si le type précisé n'est pas celui requis pour la libération.

note: Tag: para
en: When you call headerGetEntry, you must identify the tag you want from the header. This tag is an identifier for the --queryformat tags introduced in <xref linkend="ch-using-rpm-db" /> . The file rpmlib.h lists the various tags, such as RPMTAG_NAME, RPMTAG_VERSION, and RPMTAG_RELEASE.
fr: Lors d'un appel à <function>headerGetEntry</function>, vous devez préciser le marqueur souhaité dans l'en-tête. Ce marqueur est un identifiant pris parmi ceux de <option>--queryformat</option> dont il a été question au <xref linkend="ch-using-rpm-db" />. Le fichier  <filename>rpmlib.h</filename> liste les divers marqueurs, tels que RPMTAG_NAME, RPMTAG_VERSION et RPMTAG_RELEASE.

note: Tag: para
en: The following function shows how to read a string entry from a Header:
fr: La fonction ci-après montre comment lire une entrée texte dans un en-tête :

note: Tag: para
en: /* Function to read a string header entry. */
fr: /* Fonction pour lire une entrée chaîne dans un en-tête. */

note: Tag: para
en: Pass the Header object and the ID of the tag to read. For example:
fr: Passez l'objet Header et l'identifiant du marqueur à lire. Par exemple :

note: Tag: para
en: To just get the name, version, and release number, you can call the utility function headerNVR, which has the following function signature:
fr: Pour obtenir uniquement le nom, le numéro de version et de parution, vous pouvez appeler la fonction utilitaire <function>headerNVR</function>, dont la signature est la suivante :

note: Tag: para
en: When you are through with a header, free it by calling headerFree:
fr: Quand vous en avez terminé avec un en-tête, libérez-le avec un appel à <function>headerFree</function> :

note: Tag: para
en: The call to headerFree returns NULL, so you can use the call to set the original pointer to to NULL to prevent accidental reuse. For example:
fr: L'appel à <function>headerFree</function> renvoie NULL, vous pouvez donc utiliser cet appel pour donner au pointeur original la valeur NULL et ainsi prévenir une réutilisation accidentelle. Par exemple :

note: Tag: title
en: A shortcut to header information
fr: Raccourci pour lire un en-tête

note: Tag: para
en: You can read in a Header using the shortcut utility method rpmReadPackageFile:
fr: Vous pouvez lire l'objet Header en utilisant la fonction raccourci utilitaire <function>rpmReadPackageFile</function> :

note: Tag: para
en: You need to pass a transaction set to rpmReadPackageFile and an open file. The filename is just used for reporting errors. On success, rpmReadPackageFile fills in a Header object from the package file. The return value is 0 for success.
fr: Vous devez passer un ensemble de transaction à <function>rpmReadPackageFile</function> ainsi qu'un fichier ouvert. Le fichier n'est utilisé que pour les rapports d'erreur. En cas de succès, <function>rpmReadPackageFile</function> complète un objet Header à partir du fichier paquet et renvoie la valeur <literal>0</literal>.

note: Tag: para
en: To get the necessary transaction set, you need to create one with rpmtsCreate, covered in the "Programming with the RPM Database" section, following.
fr: Pour obtenir l'ensemble de transaction nécessaire, vous devrez en créer un avec la fonction <function>rpmtsCreate</function>, traitée dans la section « Programmer avec la base de données RPM », plus loin.

note: Tag: para
en: In most cases, you should call rpmReadPackageFile in place of readLead, rpmReadSignature, and headerRead, since rpmReadPackageFile also verifies the package integrity.
fr: Dans la plupart des cas, vous appelerez <function>rpmReadPackageFile</function> à la place de <function>readLead</function>, <function>rpmReadSignature</function> et <function>headerRead</function>, étant donné que <function>rpmReadPackageFile</function> vérifie également l'intégrité du paquet.

note: Tag: title
en: Closing RPM files
fr: Fermer les fichiers RPM

note: Tag: para
en: When you’re done with an RPM file, close it with Fclose:
fr: Quand vous en avez terminé avec un fichier RPM, fermez-le avec <function>Fclose</function> :

note: Tag: para
en: Fclose acts much like the standard C function fclose(3). The FD_t is an RPM data type that is very similar to a FILE pointer.
fr: <function>Fclose</function> agit de manière identique à la fonction <literal>C</literal> standard <function>fclose(3)</function>. FD_t est un type de donnée RPM tout à fait semblable à un pointeur FILE.

note: Tag: para
en: The RPM I/O subsystem, defined with rpmio.h, includes functions that mimic (and in most cases wrap) the ANSI C stdio functions. These include: Fopen, Fclose, Fread, Fwrite, Ferror, Fflush, Fileno, and Fseek.
fr: Le sous-système d'E/S de RPM, défini dans <filename>rpmio.h</filename>, inclut des fonctions imitant (et dans de nombreux cas, redéfinissant) les fonctions <function>stdio</function> ANSI du <literal>C</literal>. Celles-ci comprennent : <function>Fopen</function>, <function>Fclose</function>, <function>Fread</function>, <function>Fwrite</function>, <function>Ferror</function>, <function>Fflush</function>, <function>Fileno</function> et <function>Fseek</function>.

note: Tag: para
en: These functions wrap the ANSI C stdio functions to add new features. The Fopen function, for example, supports HTTP or FTP URLs in the place of a file name, so long as you append ".ufdio" to the mode.
fr: Ces fonctions sur-définissent les fonctions <function>stdio</function> ANSI du <literal>C</literal> pour y ajouter de nouvelles fonctionnalités. La fonction <function>Fopen</function>, par exemple, prend en charge les URL HTTP ou FTP à la place des noms de fichiers, à condition que vous ajoutiez <emphasis>.ufdio</emphasis> au mode.

note: Tag: title
en: Programming with the RPM Database
fr: Programmer avec la base de données RPM

note: Tag: para
en: Many functions in rpmlib require a transaction set. In particular, accessing the rpm database is quite easy using a transaction set.
fr: Beaucoup de fonctions dans <package>rpmlib</package> exigent un ensemble de transaction. En particulier, l'accès à la base de données <package>rpm</package> est tout à fait facilité en utilisant ce concept.

note: Tag: para
en: Create a transaction set by calling rpmtsCreate:
fr: Créez un ensemble de transaction en appelant <function>rpmtsCreate</function> :

note: Tag: para
en: RPM uses transaction sets to bracket operations on the RPM database. As the RPM API evolves, transaction sets will become more and more important. Transaction sets also help in that the RPM library will automatically open the RPM database as needed.
fr: RPM utilise des ensembles de transaction pour isoler des opérations sur la base de données RPM. Au fur et à mesure de l'évolution de l'API de RPM, les ensembles de transaction sont devenus de plus en plus importants. Les ensembles de transaction aident également dans le fait la bibliothèque RPM ouvre automatiquement la base de données RPM selon les besoins.

note: Tag: para
en: When you are done with a transaction set, call rpmtsFree:
fr: Quand vous en avez terminé avec un ensemble de transaction, appelez <function>rpmtsFree</function> :

note: Tag: para
en: The call to rpmtsFree returns NULL.
fr: L'appel à <function>rpmtsFree</function> renvoie NULL.

note: Tag: title
en: Database iterators
fr: Itérateurs de base de données

note: Tag: para
en: Once you have a transaction set, you can iterate over the installed packages in the RPM database by creating an iterator. To do this, call rpmtsInitIterator:
fr: Une fois créé un ensemble de transaction, vous pouvez itérer parmi les paquets installés dans la base de données RPM en initialisant un itérateur. Pour ce faire, appelez <function>rpmtsInitIterator</function> :

note: Tag: para
en: You need to specify which tag to iterate by, which in most cases will be the package name, RPMTAG_NAME, introduced previously With the RPMTAG_NAME tag, you need to pass the name of a package to look for in the keypointer parameter. (The keypointer varies based on the tag you pass.)
fr: Vous devez préciser avec quel marqueur itérer, dans la plupart des cas ce sera le nom du paquet, RPMTAG_NAME, dont il a déjà été question. Avec le marqueur RPMTAG_NAME, vous devez passer le nom d'un paquet à rechercher dans le paramètre <parameter>keypointer</parameter> (le <parameter>keypointer</parameter> varie selon le marqueur passé).

note: Tag: para
en: For string data, you can pass 0 for the keylen parameter. For example, this call to rpmtsInitIterator looks for all packages named sendmail.
fr: Pour des données textuelles, vous pouvez passer <literal>0</literal> pour le paramètre <parameter>keylen</parameter>. Par exemple, cet appel à <function>rpmtsInitIterator</function> recherche tous les paquets nommés <emphasis>sendmail</emphasis>.

note: Tag: para
en: The rpmdbMatchIterator allows you to iterate through a number of packages, in this case, all the packages that match a given name. After calling rpmtsInitIterator, the next step is to call rpmdbNextIterator:
fr: <function>rpmdbMatchIterator</function> vous permet de naviguer parmi un certain nombre de paquets, dans ce cas tous les paquets correspondant au nom indiqué. Après avoir appelé <function>rpmtsInitIterator</function>, vous appellerez <function>rpmdbNextIterator</function> :

note: Tag: para
en: This function returns the next package Header object in the iterator. The Header will be NULL if there are no more packages in the iterator.
fr: Cette fonction renvoie l'objet Header du paquet suivant de l'itération. Header sera NULL s'il n'y a plus de paquets dans le parcours.

note: Tag: para
en: If the Header is not NULL, you can get entries from it, as shown previously. You can use a while loop to go through all the matching packages. For example:
fr: Si Header n'est pas NULL, vous pouvez obtenir ses entrées, ainsi que cela a été précédemment montré. Vous pouvez utiliser une boucle <literal>while</literal> pour parcourir tous les paquets correspondants. Par exemple :

note: Tag: para
en: In future versions of the RPM library, rpmtsNextIterator, will replace rpmdbNextIterator.
fr: Dans de futures versions de la bibliothèque RPM, <function>rpmtsNextIterator</function> remplacera <function>rpmdbNextIterator</function>.

note: Tag: para
en: You do not need to free the Header returned by rpmdbNextIterator. Also, the next call to rpmdbNextIterator will reset the Header.
fr: Il n'est pas nécessaire de libérer l'objet Header renvoyé par <function>rpmdbNextIterator</function>. L'appel suivant à <function>rpmdbNextIterator</function> réinitialise l'objet.

note: Tag: para
en: You can customize how an iterator works by adding a pattern to the iterator with rpmdbSetIteratorRE:
fr: Vous pouvez personnaliser la façon dont un itérateur fonctionne en ajoutant un motif avec <function>rpmdbSetIteratorRE</function> :

note: Tag: para
en: Calling rpmdbSetIteratorRE modifies the passed-in iterator to use the given pattern as a further test on the given tag. The mode parameter names the type of pattern used, which can be one of those listed in Table 16-9.
fr: L'appel à <function>rpmdbSetIteratorRE</function> modifie l'itérateur interne en basculant vers l'emploi du motif donné en tant que test ultérieur du marqueur donné. Le paramètre <parameter>mode</parameter> désigne le type de motif utilisé ; il peut être un de ceux listés dans le tableau 16-9.

note: Tag: para
en: Table 16-9 Types of patterns for rpmdbSetIteratorRE
fr: Tableau 16-9 : type de motifs pour <function>rpmdbSetIteratorRE</function>

note: Tag: para
en: Same as regular expressions but with \., .*, and ^..$ added.
fr: Identique aux expressions régulières, mais en ajoutant \., .* et ^..$.

note: Tag: para
en: Glob-style patterns using fnmatch.
fr: Motifs de style global utilisant <function>fnmatch</function>.

note: Tag: para
en: Regular expressions using regcomp.
fr: Expressions régulières utilisant <function>regcomp</function>.

note: Tag: para
en: String comparisons using strcmp.
fr: Comparaisons de chaînes utilisant <function>strcmp</function>.

note: Tag: para
en: For more on these patterns, see the online manual pages for fnmatch(3), glob(7), regcomp(3), regex(7), and strcmp(3).
fr: Pour plus de détails à propos de ces motifs, voyez les pages de manuel en ligne de <function>fnmatch(3)</function>, <function>glob(7)</function>, <function>regcomp(3)</function>, <function>regex(7)</function> et <function>strcmp(3)</function>.

note: Tag: para
en: Free the iterator when done with rpmdbFreeIterator:
fr: Libérez l'itérateur quand vous en avez terminé avec <function>rpmdbFreeIterator</function> :

note: Tag: para
en: The call to rpmdbFreeIterator returns NULL.
fr: L'appel à <function>rpmdbFreeIterator</function> renvoie NULL.

note: Tag: title
en: Dependency Sets
fr: Jeux de dépendances

note: Tag: para
en: To compare package versions, create a dependency set. The rpm command, for example, uses dependency sets to compare package versions.
fr: Pour comparer les versions d'un paquet, créez un jeu de dépendances. La commande <command>rpm</command>, par exemple, utilise des jeux de dépendances pour comparer les versions d'un paquet.

note: Tag: para
en: You could compare the version numbers directly, calling headerGetEntry to get the version and release tags, converting these strings to numbers and then comparing, but this would cause problems. The custom comparison is not as exact as the code in this section, especially since many packages have version numbers that are not true numbers, such as 1.12.4, with one too many decimal points. This makes the comparisons harder. In addition, there is more than just the version number to take into account. You need to deal with the Epoch value, as well as the release, too.
fr: Vous pouvez comparer directement les numéros de version, en appelant <function>headerGetEntry</function> pour obtenir les marques de version et de parution, en convertissant ces chaînes en nombres, puis en les comparant, mais ceci peut être à l'origine de difficultés. La comparaison personnalisée n'est pas aussi rigoureuse que celle du code de cette section ; en effet, beaucoup de paquets ont des numéros de version qui ne sont pas de vrais nombres, comme 1.12.4 avec un point décimal en trop. Les comparaisons en sont rendues plus ardues. En outre, il n'y a pas que le numéro de version à considérer. Vous devez également tenir compte de la valeur <literal>Epoch</literal>, ainsi que du numéro de parution.

note: Tag: para
en: To handle all the complicated logic of comparing versions, you can use the code in this section, or call rpmvercmp. Do not try to compare version numbers with custom code.
fr: Pour gérer toute la logique complexe de comparaison des versions, vous pouvez utiliser le code de cette section ou bien faire appel à <function>rpmvercmp</function>. Ne tentez pas de comparer des numéros de version avec du code personnel.

note: Tag: para
en: To create a dependency set for a given package Header, call rpmdsThis. Calling rpmdsThis creates a dependency set that holds a triple of the package name, the Epoch/Version/Release information, and the flags.
fr: Pour créer un jeu de dépendances pour un <emphasis>Header</emphasis> de paquet donné, appelez <function>rpmdsThis</function>. L'appel de cette fonction crée un jeu de dépendances qui contient le triplet du nom du paquet, l'information <literal>Epoch/Version/Release</literal> et les marqueurs.

note: Tag: para
en: For comparing packages, you can pass RPMTAG_REQUIRENAME for the tagID. The actual tagID here is ignored for the version check. What you do need, though, are flags to check whether another package is less than or equal to the Epoch/Version/Release information in this dependency set. For this task, pass the following bit flags:
fr: Pour comparer les paquets, vous pouvez passer RPMTAG_REQUIRENAME pour <parameter>tagID</parameter>. Le vrai <parameter>tagID</parameter> est ici ignoré pour la vérification de version. Mais ce dont vous avez besoin sont les marqueurs pour vérifier si un autre paquet possède une information <literal>Epoch/Version/Release</literal> inférieure ou égale dans ce jeu de dépendances. Pour cette opération, passez le marqueur de bit suivant :

note: Tag: para
en: Once you have a dependency set, you can use the handy function rpmdsNVRMatchesDep to compare the NVR, or Name, Version, Release entries in the header of one package against the data in the dependency set.
fr: Une fois obtenu le jeu de dépendances, vous pouvez utiliser la fonction pratique <function>rpmdsNVRMatchesDep</function> pour comparer les entrées NVR (Name Version Release/Nom Version Parution) dans l'en-tête d'un paquet avec les données du jeu de dépendances.

note: Tag: para
en: After checking the dependencies, rpmdsNVRMatchesDep returns 1 if the dependency overlaps, or 0 otherwise. In terms of comparing packages, 1 means that the package file is as old or older than the installed package, and 0 means that the package already installed is newer. Pass 1 to prevent promoting the Epoch value in the packages during the comparison.
fr: Après vérification des dépendances, <function>rpmdsNVRMatchesDep</function> renvoie, soit <literal>1</literal> si les dépendances se recouvrent, soit <literal>0</literal> dans le cas contraire. En termes de comparaison de paquets, <literal>1</literal> signifie que le fichier paquet est aussi vieux ou plus vieux que le paquet installé et <literal>0</literal> signifie qu'il est plus récent. Passez <parameter>nopromote</parameter> = 1 pour empêcher la prise en compte de la valeur <emphasis>Epoch</emphasis> dans les paquets lors de la comparaison.

note: Tag: para
en: The actual comparison is controlled by the call that creates the dependency set, especially the flags. Thus, passing flags of (RPMSENSE_EQUAL|RPMSENSE_LESS) to rpmdsThis set up the test as a less than or equal test.
fr: La vraie comparaison est contrôlée par l'appel créant le jeu de dépendances, en particulier les marqueurs. Ainsi, passer les marqueurs (RPMSENSE_EQUAL|RPMSENSE_LESS) à <function>rpmdsThis</function> déclenche le test <emphasis>inférieur à</emphasis> ou <emphasis>égal à</emphasis>.

note: Tag: para
en: The RPM C API documentation marks rpmdsNVRMatchesDep as deprecated, to be replaced in the future.
fr: La documentation de l'API <literal>C</literal> de RPM note la fonction <function>rpmdsNVRMatchesDep</function> comme abandonnée, destinée à être remplacée dans l'avenir.

note: Tag: para
en: You can also call rpmVersionCompare to compare the versions of two packages:
fr: Vous pouvez également appeler <function>rpmVersionCompare</function> pour comparer les versions de deux paquets :

note: Tag: para
en: The return value is -1 if the header1 represents an older version than header2, 0 if the two headers represent the same version, and 1 if header1 represents a newer version than header2.
fr: La valeur renvoyée est de <literal>-1</literal> si <parameter>header1</parameter> représente une version plus ancienne que <parameter>header2</parameter>, <literal>0</literal> si les deux <literal>Header</literal> représentent la même version et <literal>1</literal> si <parameter>header1</parameter> représente un version plus récente que <parameter>header2</parameter>.

note: Tag: para
en: To get the name of the package from a dependency set, call rpmdsN:
fr: Pour obtenir le nom d'un paquet à partir d'un jeu de dépendances, appelez <function>rpmdsN</function> :

note: Tag: para
en: You can use rpmdsN to get the name when calling rpmtsInitIterator if you are working with dependency sets when searching the RPM database.
fr: Vous pouvez utiliser <function>rpmdsN</function> pour obtenir le nom lors d'un appel à <function>rpmtsInitIterator</function> si vous travaillez avec des jeux de dépendances lors de recherches dans la base de données.

note: Tag: para
en: Free a dependency set when done by calling rpmdsFree:
fr: Libérez l'ensemble de dépendance quand vous avez terminé en appelant <function>rpmdsFree</function> :

note: Tag: para
en: As with other free functions, rpmdsFree returns NULL.
fr: Comme avec les autres fonctions de libération, <function>rpmdsFree</function> renvoie NULL.

note: Tag: title
en: Comparing an RPM File to an Installed Package
fr: Comparer un fichier RPM avec un paquet installé

note: Tag: para
en: You can pull together the RPM file and database discussions, shown previously, to create a number of RPM programs. A useful utility that shows the RPM C library compares a package file against installed packages, reporting whether the package in the RPM file represents a newer or older package than what was already installed.
fr: Vous pouvez joindre fichier RPM et analyse de la base de données, précédemment exposée, pour créer un certain nombre de programmes RPM. Voici un utilitaire pratique montrant l'utilisation de la bibliothèque <literal>C</literal> de RPM ; il compare un fichier paquet avec les paquets déjà installés et il indique si le paquet dans le fichier RPM est plus récent ou plus ancien que celui qui est déjà installé.

note: Tag: para
en: Listing 16-4 shows such a program.
fr: Le listage 16-4 affiche ce programme.

note: Tag: para
en: Listing 16-4: vercompare.c
fr: Listage 16-4 : <filename>vercompare.c</filename>

note: Tag: para
en: /* Compares a package file with an installed package,
fr: /* Compare un fichier paquet avec un paquet installé,

note: Tag: para
en: telling which one is newer.
fr: indiquant celui qui est le plus récent.

note: Tag: para
en: Usage:
fr: Utilisation :

note: Tag: para
en: Compile as
fr: Compiler avec

note: Tag: para
en: /* Set up a table of options using standard RPM options. */
fr: /* Définir une table d'options utilisant les options standard de RPM. */

note: Tag: para
en: /* Read package header, continuing to next arg on failure. */
fr: /* Lire dans l'en-tête du paquet les arguments successifs jusqu'à épuisement. */

note: Tag: para
en: rpmError(RPMERR_OPEN, "open of %s failed: %s\n", *fnp,
fr: rpmError(RPMERR_OPEN, "l'ouverture de %s a échoué : %s\n", *fnp,

note: Tag: para
en: rpmError(RPMERR_OPEN, "%s cannot be read\n", *fnp);
fr: rpmError(RPMERR_OPEN, "%s ne peut pas être lu\n", *fnp);

note: Tag: para
en: /* Generate "name &lt;= epoch:version-release" depset for package */
fr: /* Générer le jeu de dépendances "name &lt;= epoch:version-release" pour le paquet */

note: Tag: para
en: rc = -1; /* assume no package is installed. */
fr: rc = -1; /* supposer qu'aucun paquet n'est installé. */

note: Tag: para
en: /* Search all installed packages with same name. */
fr: /* Rechercher tous les paquets installés de même nom. */

note: Tag: para
en: /* Is the installed package newer than the file? */
fr: /* le paquet installé est-il plus récent que le fichier ? */

note: Tag: para
en: fprintf(stderr, "installed package is older (or same) as %s\n",
fr: fprintf(stderr, "le paquet installé est plus ancien (ou identique) à %s\n",

note: Tag: para
en: fprintf(stderr, "installed package is newer than %s\n",
fr: fprintf(stderr, "le paquet installé est plus récent que %s\n",

note: Tag: para
en: /* Clean up. */
fr: /* Nettoyer. */

note: Tag: para
en: fprintf(stderr, "no package is installed %s\n", *fnp);
fr: fprintf(stderr, "aucun paquet %s n'est installé\n", *fnp);

note: Tag: para
en: The vercompare.c program shows reading in RPM package files as well as querying the RPM database. It introduces transaction sets, used extensively in the RPM API, and also dependency sets. You can use this program as a guide for making your own RPM programs.
fr: Le programme <filename>vercompare.c</filename> montre comment lire dans les fichiers paquets RPM et comment interroger la base de données RPM. Il utilise des ensembles de transaction, abondamment utilisés dans l'API RPM, de même que les jeux de dépendances. Vous pouvez utiliser ce programme comme guide pour vos propres programmes RPM.

note: Tag: para
en: When you run the vercompare.c program, pass the names of one or more RPM files. The vercompare.c program will extract the package name from the files, and then query the RPM database for matching packages. For each matching package, vercompare.c checks whether the installed package is newer than the RPM file, or at the same version or older. For example, if you have installed version 1.17-1 of the jikes package (a Java compiler), you can compare the installed version against RPM files. If you have a package that has a newer version, you should see output like the following:
fr: Quand vous lancez le programme <filename>vercompare.c</filename>, passez en paramètre un ou plusieurs fichiers RPM. Le programme extrait le nom du paquet à partir du nom du fichier, et ensuite interroge la base de données RPM pour retrouver les paquets correspondant à ce nom. Pour chacun de ces paquets, <filename>vercompare.c</filename> vérifie si le paquet installé est plus récent que le fichier RPM ou bien plus ancien ou identique. Par exemple, si vous avez installé la version 1.17-1 du paquet <package>jikes</package> (un compilateur Java), vous pouvez comparer la version installée aux fichiers RPM. Si vous disposez d'un paquet d'une version plus récente, vous verrez une sortie comme suit :

note: Tag: para
en: installed package is older (or same) as jikes-1.18-1.i386.rpm
fr: le paquet installé est plus ancien (ou identique) à jikes-1.18-1.i386.rpm

note: Tag: para
en: Note that the output is relative to the installed package.
fr: Notez que la sortie se réfère au paquet installé.

note: Tag: para
en: If you compare against a file that has an older version of the package, you will see results like the following:
fr: Si vous comparez avec un fichier qui contient une version plus ancienne du paquet, vous verrez le résultat suivant :

note: Tag: para
en: installed package is newer than jikes-1.14-1-glibc-2.2.i386.rpm
fr: le paquet installé est plus récent que jikes-1.14-1-glibc-2.2.i386.rpm

note: Tag: para
en: And, if you compare to an RPM file that holds the same package, you will see output as follows:
fr: Et, si vous comparez avec un fichier RPM qui contient le même paquet, vous verrez une sortie comme suit :

note: Tag: para
en: installed package is older (or same) as jikes-1.17-glibc2.2-1.i386.rpm
fr: le paquet installé est plus ancien (ou identique) à jikes-1.17-glibc2.2-1.i386.rpm

note: Tag: para
en: You can change this aspect of the test by changing the flags passed to rpmdsThis.
fr: Vous pouvez modifier cet aspect du test en changeant les marqueurs passés à <function>rpmdsThis</function>.

note: Tag: para
en: The vercompare.c program prints out nothing unless there is an error. Instead, it sets the program exit status based on the package version comparison. You can use this with automated tools, such as make, that check the exit status.
fr: Le programme <filename>vercompare.c</filename> n'affiche rien sauf en cas d'erreur. Au lieu de cela, il fournit une valeur de sortie résultant de la comparaison des versions de paquet. Vous pouvez l'utiliser avec des outils d'automatisation, comme make, qui vérifient les états de sortie.

note: Tag: para
en: If you want output from the program, pass the –v, verbose, option to the command, as shown in the previous examples.
fr: Si vous voulez qu'il y ait affichage d'une sortie, passez l'option <option>-v</option>, verbosité, à la commande comme  dans les exemples précédents.

note: Tag: para
en: The RPM cli or command-line interface functions, such as rpmcliInit, are based on the command-line options expected by the rpm and rpmbuild commands. You can use these functions to provide a high level of abstraction onto the RPM system. For example, to run the query options just like the rpm command, call rpmcliQuery.
fr: Les fonctions <function>cli</function> ou d'interface de ligne de commande de RPM, telles que <function>rpmcliInit</function>, travaillent avec les options en ligne de commande attendues par les commandes <command>rpm</command> et <command>rpmbuild</command>. Vous pouvez utiliser ces fonctions pour ajouter un niveau supplémentaire d'abstraction au système RPM. Par exemple, pour lancer des options de recherche comme vous le feriez avec la commande <command>rpm</command>, appelez <function>rpmcliQuery</function>.

note: Tag: para
en: Set the QVA_t variable to point at the global variable rpmQVKArgs, which is set up from the global option table for the query mode, rpmQueryPoptTable. Pass rpmcliQuery a set of file names or package names. You can get these names in the given format by calling poptGetArgs, introduced previously.
fr: Faites en sorte que la variable <parameter>QVA_t</parameter> pointe sur la variable globale <parameter>rpmQVKArgs</parameter>, définie à partir de la table globale des options pour le mode recherche, <emphasis>rpmQueryPoptTable</emphasis>. Passez à <function>rpmcliQuery</function> un ensemble de noms de fichiers ou de noms de paquets. Vous pourrez obtenir ces noms dans le format donné avec un appel à <function>poptGetArgs</function>, précédemment exposée.

note: Tag: para
en: To support the query options, you need the rpm query entries in your poptOption table. To get these options, add the following entry:
fr: Pour prendre en charge les options de recherche, vous avez besoin des entrées des recherches rpm dans la table poptOption. Pour obtenir ces options, ajoutez l'entrée suivante :

note: Tag: para
en: "Query options (with -q or --query):",
fr: "Options de recherche (avec -q ou --query) :",

note: Tag: para
en: With the rpmQueryPoptTable options, you can make a program that works like the rpm --query command using just the following code:
fr: Avec les options de <function>rpmQueryPoptTable</function>, vous pouvez faire un programme qui fonctionne comme la commande <command>rpm <option>--query</option></command> en utilisant seulement le code suivant :

note: Tag: para
en: /* Display error and exit... */
fr: /* Afficher une erreur et sortir... */

note: Tag: para
en: /* Make sure there's something to do. */
fr: /* S'assurer qu'il y a quelque chose à faire. */

note: Tag: para
en: fprintf(stderr, "no arguments given for --query");
fr: fprintf(stderr, "aucun argument pour --query");

note: Tag: para
en: This code supports all the query options just like the rpm command. That's both good and bad. If you wanted everything exactly like the rpm command, chances are you could use the rpm command as is. But if you need to add RPM query support into your programs, this is probably the easiest way to do it.
fr: Ce code prend en charge toutes les options de recherche comme le ferait la commande <command>rpm</command>. C'est à la fois bon et mauvais. Si vous souhaitez quelque chose exactement identique à la commande <command>rpm</command>, tant vaut-il utiliser la commande <command>rpm</command> telle que. Mais si vous avez besoin d'ajouter la prise en charge de la requête RPM dans vos programmes, c'est probablement le moyen le plus facile d'arriver à vos fins.

note: Tag: para
en: With a small additional set of code, you can add support for all the --verify options to your program. You need to include the --verify command-line option definitions, which come from the global rpmVerifyPoptTable table:
fr: Avec l'ajout d'un peu de code, vous pouvez enrichir votre programme de la prise en charge de toutes les options <option>--verify</option>. Vous avez besoin d'inclure les définitions de l'option en ligne de commande <option>--verify</option> provenant de la table globale <emphasis>rpmVerifyPoptTable</emphasis> :

note: Tag: para
en: /* Add in --verify options. */
fr: /* Ajout des options --verify. */

note: Tag: para
en: "Verify options (with -V or --verify):",
fr: "Options de vérification (avec -V ou --verify) :",

note: Tag: para
en: You can then check for the verify mode, and support the options, with code like the following:
fr: Vous pouvez alors contrôler le mode vérification, et la prise en charge des options, avec du code comme :

note: Tag: para
en: /* Verify flags are negated from query flags. */
fr: /* Les marqueurs de vérification sont la négation des marqueurs de recherche. */

note: Tag: para
en: fprintf(stderr, "no arguments given for --verify");
fr: fprintf(stderr, "aucun argument pour --verify");

note: Tag: para
en: The workhorse function in this code is rpmcliVerify, a high-level function that performs all the --verify work done by the rpm command.
fr: La fonction qui fait le gros du travail dans ce code est <function>rpmcliVerify</function> ; cette fonction de haut-niveau réalise tout le travail de la commande rpm avec l'option <option>--verify</option>.

note: Tag: para
en: Again, set the QVA_t variable to point at the global variable rpmQVKArgs, which is set up from the global option table for the query mode, rpmQueryPoptTable.
fr: À nouveau, faites que la variable <parameter>QVA_t</parameter> pointe sur la variable globale <parameter>rpmQVKArgs</parameter>, définie à partir de la table des options globales du mode recherche, <emphasis>rpmQueryPoptTable</emphasis>.

note: Tag: para
en: Putting this all together, Listing 16-5 shows a program that performs the same as the rpm command for the --query and --verify options.
fr: Mettons tout cela ensemble : le listage 16-5 affiche un programme qui fait la même chose que la commande <command>rpm</command> avec les options <option>--query</option> et <option>--verify</option>.

note: Tag: para
en: Listing 16-5: rpmq.c
fr: Listage 16-5 : rpmq.c

note: Tag: para
en: rpm --query and --verify modes in standalone program.
fr: rpm en mode --query et --verify dans un programme autonome.

note: Tag: para
en: See option usage by invoking
fr: Voyez l'utilisation des options en appelant

note: Tag: para
en: /* Check for query mode. */
fr: /* Contrôle du mode recherche. */

note: Tag: para
en: /* Check for verify mode. */
fr: /* Contrôle du mode vérification. */

note: Tag: para
en: There is not a lot of code in rpmq.c, as this program is mostly calling the high-level functions for the rpm command-line interface.
fr: Il n'y a pas beaucoup de code dans <filename>rpmq.c</filename>, étant donné que le programme fait appel en grande partie aux fonctions de haut-niveau pour l'interface en ligne de commande de <command>rpm</command>.

note: Tag: para
en: When you run the rpmq program, it performs the same tasks as the rpm command with the --query (or -q) and --verify (or -V) command-line options.
fr: Quand vous lancez le programme <command>rpmq</command>, il effectue les mêmes tâches que la commande <command>rpm</command> avec les options <option>--query</option> (ou <option>-q</option>) et <option>--verify</option> (ou <option>-V</option>) en ligne de commande.

note: Tag: para
en: For example, rpmq supports query formats:
fr: Par exemple, <command>rpmq</command> prend bien en charge les formats de recherche :

note: Tag: title
en: Where to Go from Here
fr: À partir de là, où aller ?

note: Tag: para
en: There is a lot more you can do with the RPM library; you're limited only by your imagination. The best way to get started is to follow the examples in this chapter and then try out some RPM programs on your own. After working with the RPM library for a while, you can delve into other RPM topics.
fr: Vous pouvez faire beaucoup plus avec la bibliothèque RPM ; vous n'êtes limités que par votre imagination. La meilleure façon de débuter est de suivre les exemples de ce chapitre et ensuite d'essayer quelques programmes RPM de votre facture. Après avoir travaillé un moment avec la bibliothèque RPM, vous pourrez attaquer d'autres sujets à propos de RPM.

note: Tag: para
en: The RPM Web site, at www.rpm.org, has most of the available documentation on the RPM system. This site also includes official RPM released software.
fr: Le <ulink url="http://www.rpm.org"><citetitle>site web RPM</citetitle></ulink> dispose de la quasi-totalité de la documentation disponible à propos du système RPM. Ce site comporte également les parutions officielles des logiciels RPM.

note: Tag: para
en: One of the best ways to help find out about how to perform RPM tasks is to look at the source code for the rpm program itself. For this, download the rpm-src source RPM, too. To see the rpm command-line interface functions in action, look especially at tools/rpmcache.c and tools/rpmgraph.c, two relatively short RPM files that show how to take advantage of a number of short cuts. The source code for the Python and Perl bindings can also provide extra hints about the purposes of the RPM API calls.
fr: Un des meilleurs moyens de trouver de l'aide sur la réalisation de tâches autour de RPM est d'examiner le code source du programme <command>rpm</command> lui-même. Pour cela, téléchargez le RPM source <package>rpm-sec</package>. Pour voir les fonctions de l'interface de la ligne de commande de <command>rpm</command>, examinez plus particulièrement <filename>tools/rpmcache.c</filename> et <filename>tools/rpmgraph.c</filename>, deux fichiers relativement courts montrant comment tirer avantage d'un certain nombre de raccourcis. Le code source pour les liaisons avec le Python et le Perl peut également fournir des conseils supplémentaires à propos des objectifs visés lors d'appels à l'API de RPM.

note: Tag: para
en: The RPM Web site also has a cross-referenced set of HTML pages on the RPM programming API. The pages for version 4.1 of RPM are available at www.rpm.org/rpmapi-4.1/. A good starting page is www.rpm.org/rpmapi-4.1/modules.html, which lists a number of modules within the overall RPM library. This extra level of organization can help you locate the functions you need.
fr: Le site web RPM dispose également d'un ensemble de pages HTML avec références croisées à propos de la programmation avec l'API de RPM. Les pages relatives à diverses versions de RPM sont disponibles en activant <ulink url="http://www.rpm.org/api/" ><citetitle>ce lien</citetitle></ulink>. Pour chaque version, la page relative aux modules constitue un bon début ; elle liste un certain nombre de modules pris dans l'ensemble de la bibliothèque RPM. Ce niveau complémentaire de classement peut vous aider à localiser les fonctions dont vous avez besoin.

note: Tag: title
en: Summary
fr: Résumé

note: Tag: para
en: Everything you can do with RPM you can program in C. That’s because the source code for the entire RPM system is available. In addition, the rpm and rpmbuild programs make use of a published API, called rpmlib, to access RPM functionality. You can use this library yourself.
fr: Tout ce qui est à faire avec RPM peut être programmé en <literal>C</literal>, car le code source de la totalité du système RPM est à votre disposition. En plus, les programmes <command>rpm</command> et <command>rpmbuild</command> utilisent une API publique, nommée <package>rpmlib</package>, pour avoir accès aux fonctionnalités de RPM. Vous pouvez utiliser cette bibliothèque vous-même.

note: Tag: para
en: The popt library, short for parse options, provides a lot of handy utilities for parsing very complex command-line options. You can use popt inside your own programs, even if you don’t use the rest of the RPM functionality.
fr: La bibliothèque <package>popt</package>, abréviation pour <emphasis>parse options</emphasis> (analyse d'options) fournit un grand nombre d'utilités pour analyser les options en ligne de commande les plus complexes. Vous pouvez utiliser <package>popt</package> dans vos propres programmes, même si vous ne vous servez pas des autres fonctionnalités de RPM.

note: Tag: para
en: Most RPM programs start up by calling rpmcliInit, which sets up RPM variables for the large set of command-line options supported by most RPM commands.
fr: La plupart des programmes RPM débutent par un appel à <function>rpmcliInit</function>, qui définit les variables RPM pour un grand ensemble des options en ligne de commande prises en charge par la plupart des commandes RPM.

note: Tag: para
en: Call rpmReadPackageFile to read in the Header object from a package file. You can also get Header objects for the packages installed in a system by initializing an iterator to iterate over a set of packages that meet a certain criteria.
fr: Appelez <function>rpmReadPackageFile</function> pour lire l'objet Header d'un fichier paquet. Vous pourrez aussi obtenir des objets <structname>Header</structname> à partir des paquets installés sur un système en initialisant un itérateur pour vous déplacer dans un ensemble de paquets répondant à un certain critère.

note: Tag: para
en: This chapter covers a fairly low level of access to RPM functionality. The next chapter, on Python programming, shows a higher level of abstraction for working with RPM.
fr: Ce chapitre porte sur un accès plutôt de bas niveau aux fonctionnalités de RPM. Le chapitre suivant, relatif à la programmation en Python, affiche un niveau d'abstraction plus élevé pour travailler avec RPM.
