wordexp(3) Library Functions Manual wordexp(3) NOM wordexp, wordfree - Effectuer l'expansion de mots a la maniere d'un shell POSIX BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int wordexp(const char *restrict s, wordexp_t *restrict p, int flags); void wordfree(wordexp_t *p); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : wordexp(), wordfree() : _XOPEN_SOURCE DESCRIPTION La fonction wordexp() effectue une expansion de type shell de la chaine s et retourne le resultat dans la structure pointee par p. Le type de donnees wordexp_t est une structure qui possede au moins les membres we_wordc, we_wordv, et we_offs. Le membre we_wordc est de type size_t et donne le nombre de mots dans l'expansion de s. Le membre we_wordv est de type char ** et pointe sur le tableau des mots trouves. Le membre we_offs de type size_t est quelquefois (suivant flags, voir plus loin) utilise pour indiquer le nombre d'elements du tableau we_wordv qui devraient etre remplis initialement avec le caractere NULL. La fonction wordfree() libere la memoire nouvellement allouee. Plus precisement, elle ne libere pas son argument mais libere le tableau we_wordv ainsi que les chaines vers lesquelles il pointe. L'argument chaine Puisque l'expansion est effectuee de la meme maniere que le shell (consultez sh(1)) sur les parametres d'une commande, la chaine s ne doit pas contenir de caracteres qui seraient illegaux dans les parametres d'une commande shell. En particulier, il ne doit pas y avoir de caracteres nouvelle ligne ou |, &, ;, <, >, (, ), {, } non proteges en dehors d'un contexte de substitution de commande ou de parametre. Si l'argument s contient un mot qui debute par un caractere de commentaires << # >> hors de tous guillemets, il n'est pas specifie si ce mot et les suivants sont ignores, ou si le # est considere comme un caractere normal. L'expansion L'expansion effectuee consiste en les etapes suivantes : expansion du caractere tilde (remplacement de ~utilisateur par le repertoire personnel de l'utilisateur), substitution de variable (remplacement de $FOO par la valeur de la variable d'environnement FOO), substitution de commande (remplacement de $(commande) ou `commande` par la sortie de la commande), expansion arithmetique, decoupage de champs, expansion des caracteres de remplacement (wildcard), suppression des caracteres de citation (quotes). Le resultat de l'expansion de caracteres speciaux ($@, $*, $#, $?, $-, $$, $!, $0) n'est pas specifie. Le decoupage des champs est effectue en utilisant la variable d'environnement $IFS. Si elle n'est pas positionnee, les separateurs de champs sont l'espace, la tabulation et le caractere nouvelle ligne. Le tableau de sortie Le tableau we_wordv contient les mots trouves, suivis par le caractere NULL. Le parametre des attributs L'argument flag est un OU inclusif bit a bit des valeurs suivantes : WRDE_APPEND Ajouter les mots trouves au tableau resultant d'un precedent appel. WRDE_DOOFFS Inserer we_offs caracteres initiaux NULL dans le tableau we_wordv (ils ne seront pas comptes dans le membre we_wordc retourne). WRDE_NOCMD Ne pas effectuer la substitution de commande. WRDE_REUSE Le parametre p resulte d'un precedent appel a wordexp(), et wordfree() n'a pas ete appele. Reutiliser l'espace de stockage alloue. WRDE_SHOWERR Normalement, lors d'une substitution de commande, stderr est redirigee vers /dev/null. Cet attribut specifie que stderr ne sera pas redirige. WRDE_UNDEF Considerer comme une erreur le fait qu'une variable shell non definie soit developpee. VALEUR RENVOYEE En cas de succes, wordexp() renvoie 0. En cas d'echec, wordexp() une des valeurs suivantes differentes de zero : WRDE_BADCHAR Occurrence illegale d'un caractere nouvelle ligne ou d'un caractere parmi |, &, ;, <, >, (, ), {, }. WRDE_BADVAL Il y a une reference a une variable shell non definie, et l'attribut WRDE_UNDEF nous demande de considerer que c'est une erreur. WRDE_CMDSUB Une substitution de commande est requise, lais l'attribut WRDE_NOCMD nous demande de considerer que c'est une erreur. WRDE_NOSPACE Plus assez de memoire. WRDE_SYNTAX Erreur de syntaxe shell, comme des parentheses ou des guillemets non apparies. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +-----------+--------------------------+-------------------------------+ |Interface | Attribut | Valeur | +-----------+--------------------------+-------------------------------+ |wordexp() | Securite des threads | MT-Unsafe race:utent | | | | const:env env sig:ALRM timer | | | | locale | +-----------+--------------------------+-------------------------------+ |wordfree() | Securite des threads | MT-Safe | +-----------+--------------------------+-------------------------------+ Dans le tableau ci-dessus, utent dans race:utent signifie que si unedes fonctions setutent(3), getutent(3) ou endutent(3) est utilisee en parallele dans differents threads d'un programme, des conditions de competition de donnees peuvent survenir. wordexp() appelle ces fonctions, aussi race:utent est utilise pour le rappeler aux utilisateurs. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001. glibc 2.1. EXEMPLES La sortie du programme d'exemple suivant est approximativement celle de << ls [a-c]*.c >>. #include #include #include int main(void) { wordexp_t p; char **w; wordexp("[a-c]*.c", &p, 0); w = p.we_wordv; for (size_t i = 0; i < p.we_wordc; i++) printf("%s\n", w[i]); wordfree(&p); exit(EXIT_SUCCESS); } VOIR AUSSI fnmatch(3), glob(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Frederic Hantrais et Jean- Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 wordexp(3)