Справочное описание GLib | ||||
---|---|---|---|---|
#include <glib.h>
enum GShellError;
#define G_SHELL_ERROR
gboolean g_shell_parse_argv (const gchar *command_line,
gint *argcp,
gchar ***argvp,
GError **error);
gchar* g_shell_quote (const gchar *unquoted_string);
gchar* g_shell_unquote (const gchar *quoted_string,
GError **error);
typedef enum
{
/* несоответствие или иначе искажённое квотирование */
G_SHELL_ERROR_BAD_QUOTING,
/* анализируемая строка пустая */
G_SHELL_ERROR_EMPTY_STRING,
G_SHELL_ERROR_FAILED
} GShellError;
Коды ошибок возвращаемые функциями оболочки (shell functions).
#define G_SHELL_ERROR g_shell_error_quark ()
Домен ошибки для функций оболочки. Ошибки в этом домене из перечисления GShellError. Смотрите GError для информации о доменах ошибки.
gboolean g_shell_parse_argv (const gchar *command_line,
gint *argcp,
gchar ***argvp,
GError **error);
Анализирует командную строку в одномерном массиве параметров, аналогичным с
shell способом, но без многих расширений выполняемых shell
(переменные, globs, операторы, расширение файлового имени,
и т.д. не поддерживаются). Результат определяется в том же самом стиля как
вы могли бы получить из UNIX98 /bin/sh, пока ввод не содержит не поддерживаемых
shell расширений. Если ввод содержит такие расширения, они помещаются буквально.
Возможные ошибки происходят из G_SHELL_ERROR
домена. Освобождается одномерный массив с помощью g_strfreev()
.
gchar* g_shell_quote (const gchar *unquoted_string);
Квотирует строку так чтобы оболочка (/bin/sh) интерпретировала её как unquoted_string
.
Если вы поместите имя файла в оболочку, например, вы должны сначала квотировать его с помощью этой функции.
Возвращаемое значение должно освобождаться с помощью g_free()
.
Используемый стиль квотирования не определён (могут использоваться или одинарные или двойные кавычки).
unquoted_string : |
строка литерал |
Возвращает : | квотированная строка |
gchar* g_shell_unquote (const gchar *quoted_string,
GError **error);
Снимает квотирование строки как если бы это сделала оболочка (/bin/sh).
Обрабатывает кавычки только; если строка содержит file globs, арифметические операторы,
переменные, обратные кавычки, переназначения, или другие специальные shell особенности,
результат будет отличаться от реального результата который дала бы shell
(переменные, обратные кавычки, и т.д. будут помещены как литералы вместо интерпретации).
Эта функция гарантировано завершается успешно если применяется результат
g_shell_quote()
.
Если она завершилась неудачей, то возвращает NULL
и устанавливает ошибку. quoted_string
не должен фактически содержать кавычки или escaped текст;
g_shell_unquote()
просто проходит через строку
и снимает квотирование (unquotes/unescapes) как если бы это сделала shell-оболочка. Обрабатываются и двойные и одинарные кавычки,
а так же escapes включая завершающий символ новой строки. Возвращаемое значение должно освобождаться с помощью
g_free()
.
Возможные ошибки находятся в домене G_SHELL_ERROR.
Shell правила квотирования немного странные. Единственные кавычки сохраняют литеральную строку в точности. escape-последовательность не допускается; даже \' - если вы хотите иметь ' в квотированном тексте, вы можете сделать примерно так 'foo'\''bar'. Двойные кавычки позволяют $, `, ", \, и символ новой строки выделять обратным слэшем. Иначе двойные кавычки сохраняют всё буквально.
quoted_string : |
shell-quoted строка |
error : |
расположение для возвращаемой ошибки или NULL |
Возвращает : | unquoted строка |