有用于绘制图片和制作.jpg文件的C库吗?

时间:2019-05-11 05:24:10

标签: c linux yacc lex call-graph

我认为这个问题可能看起来非常愚蠢和不必要,但我真的不知道该如何解决。

由于使用了一些用C编写的测试代码,因此需要制作调用图。

我制作了lex文件和yacc文件来解析语法。

现在,我可以制作一个可执行文件来解析以C语言编写的.l和.y文件。

但是由于可执行文件和输入文件的关系,现在我必须制作一个jpg文件和文本文件

jpg文件和文本文件需要在输入(调用图)中显示函数的调用关系

所以假设有文件

lex.l yacc.y test.c

我需要制作一个可执行文件。

lex lex.l命令make lex.yy.c

yacc -d yacc.y命令制作y.tab.cy.tab.h(lex文件的标题)

现在cc y.tab.c lex.yy.c cammand将制作一个可执行文件a.out

因此,由于a.out < test.c命令的出现,我必须制作一个jpg文件(.jpg)和文本文件(.txt)

我知道如何使用fprintf()函数制作文本文件。

但是jpg文件是我真的不知道的东西。

我不能使用其他一些工具

我只能在lex文件和yacc文件中键入一些C代码

所以我想我可能会使用一些C库来做到这一点

有什么办法可以做到这一点?

谢谢

1 个答案:

答案 0 :(得分:1)

  

由于使用了一些用C编写的测试代码,因此需要制作调用图。

您可以fork进行一些 other process绘图并使用inter-process communication工具(这可能是最简单的方法,因为它符合Unix philosophy)。考虑运行某些GraphViz或也许GnuPlot进程。您需要掌握Linux系统编程的技能(明智地使用system calls中列出的几个syscalls(2)),因此,您应该阅读ALP或更高版本。

  

因此,由于a.out < test.c命令的出现,我必须制作一个jpg文件(.jpg)和文本文件(.txt)

不要为您的程序a.out命名,在2019年这太荒谬了。了解如何invoke GCC。并学习use程序参数(您可能想使用parsing program arguments工具)。您将以myprogram test.c的身份调用程序,但要知道您的shell (您将用来运行程序的shell)会执行globbing

您还可以使用GUI或{{3}之类的event loop,使您的程序成为某个GUI toolkit应用程序(以该工具包提供的某些GTK为中心) }。如果您只想输出一些图形,则可以考虑使用libSDL

如果您具有libcairo技能,则可以考虑使用网络技术(例如web programming + SVG + HTML5);如果您想使程序成为一些专用的Web服务器(例如,用户将浏览某些Canvas URL),请考虑使用http://localhost:12345服务器库,例如HTTP

如果您接受产生带有图纸的其他类型的文件,请考虑发出一些SVG或PDF文件。您也会找到相应的库。顺便说一句,SVG是一种文本格式,您可以直接发出。

最后,您可以找到许多处理JPEG文件的库,例如libonion

PS。您确实应该在网络上找到一个小型的现有 libjpeg项目(例如在free softwaregithubgitlab上,等等...)与目标保持精髓,并研究其源代码以获取灵感。这样,您将学到许多实际的知识,并且可以节省大量的工作时间(因为您显然缺乏实践技能)。

顺便说一句,如果您的目标是找到一些现实生活中的C程序的调用图,请考虑编写一些sourceforge。几周前(大约800行C ++代码),我做了一些有关我的GCC plugin研究项目的有趣演示。而且,如果您必须解析C代码,则需要解析它的预处理形式。因此,运行一些cpp预处理器即可得到该信息。