我可以 运行 从缓冲区输入一个程序吗?

Can I run a program with input from the buffer?

我正在寻找 运行 内存中目标上的程序。

例如,我想在内存中而不是文件中的一组字符上调用 LaTeX

我知道我可以在 C 中设置一个文件指针到目标内存,read/write 和内存。

但是我不知道是否有任何方法可以将文件指针或包装器传递给 LaTeX?

运行 在 Arch Linux 上,我不在乎我现在是否只是获得依赖于环境的解决方案 - 只需要一个起点。

最简单的方法是在/tmp 中创建一个文件。在大多数现代系统上,/tmp 使用 "tmpfs" 文件系统挂载,该文件系统将文件存储在内存中。

也许您不想依赖 /tmp 作为 tmpfs。在这种情况下,您可以使用 memfd_create 创建一个仅存储在内存中的文件描述符。如果 LaTeX 需要文件名,您可以使用 /proc/<your pid>/fd/<fd number>.

直接从您的进程打开文件

第三种解决方案是使用管道(popen 内部使用的管道)。如果 LaTeX 想要在文件中向后或向前搜索,这将不起作用 - 你不能在管道中搜索。另一方面,管道不必一次存储整个文件。

这是一个传统的解决方案 popen:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char buffer[] =
        "\documentclass[11pt]{scrartcl}\n"
        "\begin{document}This is the document.\n"
        "\end{document}\n";
    FILE *fp = popen("latex", "w");
    if (!fp) perror("latex"), exit(1);
    fputs(buffer, fp);
    fclose(fp);
}