Arguments d un programme



Documents pareils
Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

3IS - Système d'exploitation linux - Programmation système

Programmation système de commandes en C

Le prototype de la fonction main()

Cours Programmation Système

Programmation système I Les entrées/sorties

Le langage C. Séance n 4

Bases de programmation. Cours 5. Structurer les données

Compression de Données - Algorithme de Huffman Document de Conception

Cours d initiation à la programmation en C++ Johann Cuenin

Programmation système en C/C++

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Conventions d écriture et outils de mise au point

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours 6 : Tubes anonymes et nommés

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Algorithmique et Programmation, IMA

Java Licence Professionnelle CISII,

TD3: tableaux avancées, première classe et chaînes

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

INFO-F-404 : Techniques avancées de systèmes d exploitation

Introduction au langage C

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Utilisation d objets : String et ArrayList

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Les structures. Chapitre 3

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

1 Description générale de VISFIELD

OS Réseaux et Programmation Système - C5

Travaux Dirigés n 1 : chaînes de caractères

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

INFO-F-105 Language de programmation I Séance VI

Structurer ses données : les tableaux. Introduction à la programmation

Le traitement du temps

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Plan du cours. Historique du langage Nouveautés de Java 7

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Premiers Pas en Programmation Objet : les Classes et les Objets

GESTION DES FICHIERS C/UNIX

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Manuel d'installation

UE Programmation Impérative Licence 2ème Année

Cours 14 Les fichiers

Le système de gestion des fichiers, les entrées/sorties.

Gestion distribuée (par sockets) de banque en Java

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

TP, première séquence d exercices.

Construction de logiciel et packaging

TP1 : Initiation à Java et Eclipse

Une introduction à Java

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Derrière toi Une machine virtuelle!

Programmation impérative

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Quelques éléments de compilation en C et makefiles

Cours 1: Java et les objets

Cours d Algorithmique et de Langage C v 3.0

COMPARAISONDESLANGAGESC, C++, JAVA ET

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

TP3 : Manipulation et implantation de systèmes de fichiers 1

Programmation Objet Java Correction

Les chaînes de caractères

Chapitre 1 : La gestion dynamique de la mémoire

INF 104 (SELC) Introduction au langage C

PRESENTATION DES RECOMMANDATIONS DE VANCOUVER

Lier Erlang avec d autres langages de programmation

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Les processus. Système L3, /39

Simulation d un système de paiement par carte bancaire

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Recherche dans un tableau

Principes des langages de programmation INF 321. Eric Goubault

Programmer en JAVA. par Tama

Poker. A rendre pour le 25 avril

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Rappels Entrées -Sorties

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

INSTALLATION ET CONFIGURATION DE OPENLDAP

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Les structures de données. Rajae El Ouazzani

Architecture d un système d exploitation

Programmation C. Apprendre à développer des programmes simples dans le langage C

Architecture des ordinateurs

Outils pour la pratique

Cours Bases de données 2ème année IUT

Programmation Réseau SSH et TLS (aka SSL)

Les débordements de tampons et les vulnérabilités de chaîne de format 1

Présentation du langage et premières fonctions

Les fichiers. Chapitre 4

Compléments de documentation Scilab : affichage de texte et formatage de nombres

I. Introduction aux fonctions : les fonctions standards

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Module 16 : Les fonctions de recherche et de référence

Programmation C. J.-F. Lalande. 15 novembre 2012

Communication sous UNIX les sockets

Transcription:

Arguments d un programme L2 SPI, Bruno Jacob 1 Arguments Quand on appelle un programme dans un environnement UNIX ou MS- DOS, on compose une ligne de commandes de la forme : nom-du-programme argument1 argument2... L exécution d un programme commence par la fonction main. Tous se passe alors comme si le Système d Exploitation avait appelé la fonction main comme une fonction ordinaire. Voici la signature habituelle de cette fonction : int main ( int argc, char argv [ ], char env [ ] ) ; avec argc (pour argument counter) : nombre d arguments de la ligne de commande y compris le nom du programme argv (pour argument value) : liste des arguments de la ligne de commande. Ceux ci sont considérés comme des chaînes de caractères. env (pour environment) : liste des variables d environnement et leur valeur. Vous pouvez bien sur changer les noms des paramètres argc, argv et env. En général, si on ne se sert pas des variables d environnement, alors on ne déclare pas le praramètre env. Exemple : Si d une part, dans le programme toto on veut capturer les arguments de la ligne de commande alors on doit utiliser stdio.h la signature de sa fonction main dans le fichier source toto.c sera int main ( int argc ; char argv [ ], char env [ ] ) et si, d autre part, le programme est activé par la ligne de commandes toto Pierre 12 34.56 1

alors les arguments de la ligne de commandes sont transmis aux paramètres de la fonction main de la manière suivante : "toto" "Pierre" "12" "34.56" argc 4 argv NULL 0 1 2 3 4 La place mémoire du tableau argv est réservée le 1 o argument ( argv[0] ) est toujours rempli et affecté par le nom de l exécutable (ou du programme ou de la commande) les autres éléments pointent sur les arguments. La place mémoire que prend la chaîne de caractères pour stocker chaque argument est réservée en principe, le dernier élément de argv (après le dernier argument donc) est à NULL. arguments main.c, arguments main map.c 2 Options courtes Les options sont des arguments optionnels de la ligne de commandes. Ils peuvent apparaître à n importe quelle place ou pas du tout. Généralement, pour distinguer les options des arguments obligatoires on les fait précéde par - ou. Les options peuvent être simplement un indicateur (ou flag) ou avoir une valeur. Exemple : si on tape la ligne de commande nom-du-programme -w arg1 -x=toto arg2 -y=10 arg3 -z alors on aura : liste des arguments : arg1, arg2 et arg3 liste des options : w sans valeur, x avec la valeur toto, y avec la valeur 10 et z sans valeur Pour capturer ces options et leurs valeurs, sans les confondre avec les arguments, il faut analyser la chaîne de caractères des arguments du main. Dans ce cas on fait généralement appelle à la fonction getopt. 2

2.1 Synopsis #include <unistd.h> extern int optarg ; extern int optind; extern int optopt; extern int opterr; extern int optreset; int getopt(int argc, char * const argv[], const char *optstring); argc et argv sont les mêmes que ceux du main : ce sont le nombre et la liste d arguments qui sont transmis à la fonction main() lors du lancement du programme. optsring contient les noms des options (1 caractère) 2.2 Description La fonction getopt() analyse les arguments de la ligne de commande. Tout élément de argv qui commence par - est considéré comme une option. Les caractères à la suite du - initial sont les caractères de l option. Si getopt() est appelée à plusieurs reprises, elle renverra successivement chaque caractère de chaque option. optstring est une chaîne contenant l ensemble des caractères d option autorisés. Si un de ces caractères est suivi par un deux-point ( : ) alors l option nécessite un argument supplémentaire. Celui-ci sera placé dans optarg. Remarques 1. les options doivent se trouver entre le nom du programme et les arguments 2. les indices des arguments dans argv ne bougent pas 3

2.3 Valeurs renvoyées getopt() renvoie le caractère de l option si une option est trouvée -1 si toutes les options de la ligne de commande ont été analysées "?" si un caractère d option ne se trouve pas dans optstring. La variable externe optopt contient alors ce caractère inconnu si une valeur manque à une option ":" si premier caractère de optstring est : "?" sinon options courtes.c 3 Options longues Les options avec getopt sont ici réduites à un seul caractère, et on peut trouver que ce n est pas très explicite ou lisible, on peut alors utiliser les fonctions getopt long() et getopt long only(). 3.1 Synopsis #include <getopt.h> extern char *optarg; extern int optind; extern int optopt; extern int opterr; extern int optreset; int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex); int getopt_long_only(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex); 3.2 Description La fonction getopt long() fonctionne comme getopt() sauf qu elle accepte également des noms longs d option, commençant par deux tirets. Les noms longs d option peuvent être abrégés si l abréviation est unique. Une 4

option longue peut prendre un argument, de la forme --arg=param ou --arg param. longopts est un pointeur sur le premier élément d un tableau de structures struct option déclarées dans <getopt.h> ainsi : struct option { const char *name; int has_arg; int *flag; int val; }; La signification des différents champs est la suivante : name est le nom de l option longue. has arg vaut : no argument (ou 0) si l option ne prend pas d argument required argument (ou 1) si l option prend un argument optional argument (ou 2) si l option prend un argument optionnel flag spécifie la manière de renvoyer les résultats pour une option longue ( en général à NULL ) val est la valeur à renvoyer, ou à charger dans la variable pointée par flag. Le dernier élément de la table doit être rempli avec des zéros. Si longindex n est pas NULL, il pointe vers une variable qui est définie avec l index de l option longue correspondant à longopts. getopt long only() fonctionne comme getopt long(), mais - tout comme indiquent une option longue. Si une option commençant par - (et non ) ne correspond pas à une option longue, mais correspond à une option courte, elle est analysée en tant qu option courte. Remarques 1. les options peuvent se trouver n importe où dans la ligne de commandes 2. les indices des arguments dans argv débutent à 0 3. ces fonctions sont dans les objets getopt.o et getopt1.o. Ils sont souvent déjà installés mais si ce n est pas le cas on peut trouver facilement les sources et les compiler. 5

3.3 Valeurs renvoyées getopt long() et getopt long only() renvoient également le caractère d option courte s ils en trouvent une. Pour les options longues, ils renvoient val si flag vaut NULL, et 0 sinon. Les erreurs et la fin des options sont gérées comme avec getopt(), en renvoyant de surcroît "?" pour une correspondance ambiguë, ou un paramètre en trop. options longues.c 6