我可以 运行 从缓冲区输入一个程序吗?
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);
}
我正在寻找 运行 内存中目标上的程序。
例如,我想在内存中而不是文件中的一组字符上调用 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);
}