Man page - wordfree(3)

Packages contains this manual

Available languages:

en fr ja ru

Manual

wordexp

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
Строковый аргумент
Дополнение
Массив результата
Аргумент флагов
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
АТРИБУТЫ
СТАНДАРТЫ
ИСТОРИЯ
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

wordexp, wordfree - дополняет слово как оболочка posix

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#include <wordexp.h>

int wordexp(const char *restrict s , wordexp_t *restrict p , int flags );
void wordfree(wordexp_t *
p );

Требования макроса тестирования свойств для glibc (см. feature_test_macros (7)):

wordexp (), wordfree ():
_XOPEN_SOURCE

ОПИСАНИЕ

Функция wordexp () выполняет раскрытие строки s также, как это делается в оболочке командной строки, и возвращает результат в структуре, на которую указывает p . Тип данных wordexp_t — структура, которая содержит, по крайней мере, поля we_wordc , we_wordv и we_offs . Поле we_wordc имеет тип size_t и содержит количество слов в раскрытой s . Поле we_wordv имеет тип char ** и указывает на массив найденных слов. Поле we_offs имеет тип size_t и (в зависимости от flags , см. далее) используется для указания количества начальных элементов в массиве we_wordv , которые должны быть заполнены NULL.

Функция wordfree () освобождает ранее выделенную память. Более точно, она не освобождает память своего аргумента, а освобождает память, занятую под массив we_wordv и строки, которые в нём содержатся.

Строковый аргумент

Так как дополнение производится согласно правилам оболочки командной строки (см. sh (1)) по преобразованию параметров в команду, строка s не должна содержать символы, которые запрещено передавать в параметрах команд оболочки. В частности, не должно быть неэкранированных символов новой строки или |, &, ;, <, >, (, ), {, } вне контекста подстановки команды или параметра.

Если аргумент s содержит слово, которое начинается с символа комментария #, находящегося не в кавычках, то такая ситуация является неопределённой, и непонятно, нужно ли игнорировать слово или все слова, или не считать # символом комментария.

Дополнение

The expansion done consists of the following stages: tilde expansion (replacing ~user by user’s home directory), variable substitution (replacing $FOO by the value of the environment variable FOO), command substitution (replacing $(command) or `command` by the output of command), arithmetic expansion, field splitting, wildcard expansion, quote removal.

Результат дополнения специальных параметров ($@, $*, $#, $?, $-, $$, $!, $0) не определён.

Field splitting is done using the environment variable $IFS. If it is not set, the field separators are space, tab, and newline.

Массив результата

Массив we_wordv содержит найденные слова и заканчивается NULL.

Аргумент флагов

Аргумент flag представляет собой побитовое объединяющее ИЛИ следующих значений:
WRDE_APPEND

Добавлять найденные слова в массив, полученный в результате предыдущего вызова.

WRDE_DOOFFS

Вставить we_offs начальных NULL в массив we_wordv (они не считаются в конечном we_wordc ).

WRDE_NOCMD

Не выполнять подстановку команд.

WRDE_REUSE

Аргумент p получен от предыдущего вызова wordexp (), и функция wordfree () не была вызвана. Повторно использовать выделенное пространство.

WRDE_SHOWERR

Обычно, во время подстановки команды вывод stderr перенаправляется в /dev/null . Этим флагом задаётся отмена такого перенаправления stderr .

WRDE_UNDEF

Считать ошибкой, если не определена раскрываемая переменная оболочки.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

On success, wordexp () returns 0. On failure, wordexp () returns one of the following nonzero values:
WRDE_BADCHAR

Недопустимое появление символа новой строки или одного из символов |, &, ;, <, >, (, ), {, }.

WRDE_BADVAL

Указана неопределённая переменная оболочки и установлен флаг WRDE_UNDEF .

WRDE_CMDSUB

Запрошена подстановка команды, но установлен флаг WRDE_NOCMD , указывающий считать это ошибкой.

WRDE_NOSPACE

Не хватает памяти.

WRDE_SYNTAX

Синтаксическая ошибка оболочки, например незакрытая скобка или кавычка.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes (7).

Image grohtml-610668-1.png

В приведённой выше таблице utent в race:utent означает, что если любая из функций setutent (3), getutent (3) или endutent (3) используется одновременно в нескольких нитях программы, то может возникнуть состязательность по данным. Эти функции вызываются из wordexp (), поэтому мы используем race:utent для напоминания.

СТАНДАРТЫ

POSIX.1-2008.

ИСТОРИЯ

POSIX.1-2001. glibc 2.1.

ПРИМЕРЫ

Результатом следующего примера будет таким же что и при выполнении команды «ls [a-c]*.c».

#include <stdio.h>
#include <stdlib.h>
#include <wordexp.h>
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);
}

СМОТРИТЕ ТАКЖЕ

fnmatch (3), glob (3)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .