Как я могу назвать awk или sed из c программы?

Я не уверен, почему вы получили так много отрицательных голосов, но я знаю решение этой проблемы. Чтобы создать что-то подобное, вам нужно использовать SVG. Масштабируемая векторная графика (SVG) - это элемент в HTML, используемый для рисования сложного контура, однако многие люди используют для его создания онлайн-инструменты, такие как GIMP, Adobe Illustrator или Inkscape. Вы рисуете их в программе и экспортируете данные пути в ваш HTML-документ. Я надеюсь, что это поможет вам и вашему растущему сайту. https://inkscape.org/ - Inkscape https://www.gimp.org/ - GIMP

5
задан samoz 18 March 2009 в 15:05
поделиться

5 ответов

Был бы popen работа? Это порождает процесс, затем Вы чтение-запись с a FILE* дескриптор

7
ответ дан 18 December 2019 в 09:53
поделиться

Затем Ваш выбор system(), или пользование некоторой библиотекой, которая переносит процесс, мечущий икру для Вас. Последнему, или жесткому способу, которым Вы хотели избежать, рекомендуют, если Вы хотите точную регулировку по ошибкам, каналам, и так далее.

5
ответ дан 18 December 2019 в 09:53
поделиться

система () достаточно легка.

Но необходимо попытаться не сделать это, если Вы можете. Сценарии работают лучше всего, когда они сверху вещей, не внизу. Если Вы находитесь в UNIX, это часто - путь лучше, чтобы разбить работу и записать высокоуровневый сценарий для вызова всех частей.

Я не забываю наблюдать, что программист добавляет огромное количество системных вызовов в его код C, чтобы избежать необходимости изучать Оболочку Bourne. Он полагал, что это был умный и быстрый способ получить его движение, однако когда это перестало работать, это перестало работать плохо. Он потратил впустую огромное количество времени, отлаживающее путаницу. Это был бы путь быстрее, чтобы просто изучить несколько простых команд оболочки...

Paul.

3
ответ дан 18 December 2019 в 09:53
поделиться

libc имеет функции system и popen, которые работают отчасти как это:

int system(cont char *command) {
    const char *argv[4] = {"/bin/sh", "-c", command};
    int status;
    pid_t child = fork();
    if (child == 0) {
        execve(argv[0], argv, NULL);
        exit(-1);
    }
    waitpid(child, &status, 0);
    return status;
}

FILE *popen(const char *command, const char *type) {
    int fds[2];
    const char *argv[4] = {"/bin/sh", "-c", command};
    pipe(fds);
    if (fork() == 0) {
        close(fds[0]);
        dup2(type[0] == 'r' ? 0 : 1, fds[1]);
        close(fds[1]);
        execve(argv[0], argv, NULL);
        exit(-1);
    }
    close(fds[1]);
    return fdopen(fds[0], type);
}

(кроме с большим количеством проверки ошибок и материала)

Если Вы хотите более прекрасное управление обработкой аргумента (вместо прохождения через sh), или Вы хотите управление больше чем одним из {stdin, stdout, stderr}, необходимо будет записать это сами или найти библиотеку. Но стандартная библиотека покрывает большинство вариантов использования.

1
ответ дан 18 December 2019 в 09:53
поделиться

Можно сделать это через систему (), звонят, Этот Поток является хорошим примером

1
ответ дан 18 December 2019 в 09:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: