LINUX.ORG.RU

graphviz


0

0

Ткните пожалуйста функцией как в программе на си, использующей graphviz, вывести в пнг-файл диаграмму. у меня нечто подобное:

...
gvc = gvContext();
gvParseArgs(gvc, argc, argv);
 g = agopen("g", AGDIGRAPH);
 n = agnode(g, "n");
 m = agnode(g, "m");
 e = agedge(g, n, m);
 e = agedge(g, n, m);
 e = agedge(g, n, m);
 n = agnode(g, "r");
 e = agedge(g, m, n);

agsafeset(n, "color", "red", "");
gvLayoutJobs(gvc, g);
gvRenderFilename(gvc, g, "png", "test.png"); //тут выводит текстовый файл
gvFreeLayout(gvc, g);
agclose(g);
return (gvFreeContext(gvc));  
}
Если собрать программу и сделать ./a.out > testtest.png то картинка сохранится. Хотелось бы что бы вывод был в файл а не на стдаут.

anonymous

Как перенаправление ввода-вывода в шелле сделано, знаешь? Так же и делай, fork, open, close, dup2 -- твои друзья.

balodja ★★★
()
Ответ на: комментарий от balodja

Вот вот, dup2 и использую, но мне кажется что это неправильно... Уверен, есть более верный вариант.

anonymous
()
Ответ на: комментарий от anonymous

#include <graphviz/gvc.h>

int main(int argc, char **argv)
{
    GVC_t *gvc;
    graph_t *g; 
    FILE *fp;
    gvc = gvContext();
    if (argc > 1)
        fp = fopen(argv[1], "r");
    else
        fp = stdin;
    g = agread(fp);
    gvLayout(gvc, g, "dot");
    gvRenderFilename(gvc, g, "png", "a.png");
    gvFreeLayout(gvc, g); 
    agclose(g);
    return (gvFreeContext(gvc));
}

balodja ★★★
()
Ответ на: комментарий от balodja

Слегка поправленный вариант примера из library guide. Попробовал -- работает, как надо.

balodja ★★★
()
Ответ на: комментарий от anonymous

Дык, если речь о gvRender, то для него надо fopen'ом открывать файл и полученный указатель подпихивать gvRender :) man 3 fopen

balodja ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.