Provided by: manpages-ru-dev_4.27.0-1_all 

НАИМЕНОВАНИЕ
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).
┌────────────┬──────────────────────┬───────────────────────────────────────────────────────────────────┐
│ Интерфейс │ Атрибут │ Значение │
├────────────┼──────────────────────┼───────────────────────────────────────────────────────────────────┤
│ wordexp() │ Безвредность в нитях │ MT-Unsafe race:utent const:env env sig:ALRM timer locale │
├────────────┼──────────────────────┼───────────────────────────────────────────────────────────────────┤
│ wordfree() │ Безвредность в нитях │ MT-Safe │
└────────────┴──────────────────────┴───────────────────────────────────────────────────────────────────┘
В приведённой выше таблице 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 или
более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских
переводчиков.
Справочные страницы Linux 6.9.1 15 июня 2024 г. wordexp(3)