有没有可能;“打印”;gnuplot';s直接输出到标准输出? 我使用一个第三个PART工具,用于从Web应用程序的后端调用C++中的GnUpTrand。该web应用程序是在CGI下执行的,所以任何转到STDOUT的内容都是浏览器的结果。在这种情况下,web请求将针对图像本身,因此输出之前将有一些HTTP头,包括image/png的Content-Type

有没有可能;“打印”;gnuplot';s直接输出到标准输出? 我使用一个第三个PART工具,用于从Web应用程序的后端调用C++中的GnUpTrand。该web应用程序是在CGI下执行的,所以任何转到STDOUT的内容都是浏览器的结果。在这种情况下,web请求将针对图像本身,因此输出之前将有一些HTTP头,包括image/png的Content-Type,c++,gnuplot,C++,Gnuplot,取而代之的是,我希望能够通过STDOUT直接将GNUPlot的输出传输到管道中,但我找不到一种方法来要求GNUPlot除了写入磁盘上的映像文件或打开X11窗口之外做任何事情 这可能吗?写入命名管道?您用mkfifo制作的那种 我使用了以下结合了mkfifo和mktemp的愚蠢技巧: FOO=$(mktemp -d) mkfifo "$FOO/bar" # pipe some stuff through "$FOO/bar" rm -r "$FOO" 记住,一旦您拥有了相同的命名管道,就没有任何

取而代之的是,我希望能够通过
STDOUT
直接将GNUPlot的输出传输到管道中,但我找不到一种方法来要求GNUPlot除了写入磁盘上的映像文件或打开X11窗口之外做任何事情


这可能吗?

写入命名管道?您用
mkfifo
制作的那种

我使用了以下结合了
mkfifo
mktemp
的愚蠢技巧:

FOO=$(mktemp -d)
mkfifo "$FOO/bar"
# pipe some stuff through "$FOO/bar"
rm -r "$FOO"

记住,一旦您拥有了相同的命名管道,就没有任何东西可以阻止您通过该管道。

在gnuplot脚本中,只是不要将输出文件设置为将图像内容定向到stdout:

gnuplot -e 'set terminal pngcairo; plot x' > myfile.png

我不完全确定,它必须如何与gnuplotiostream集成。

原则上,您可以在管道中调用gnuplot并反复轮询输出。不过,我会像您现在所做的那样将其保存到一个文件中。如果把整个文件读入内存是个问题,我可能会想办法一件一件地把它读入内存?@Cheersandhth.-Alf:我只是想避免存储在硬盘上来回往返。读取文件不是什么大问题(事实上,我必须从某处读取字节!)哦,这是个好主意。。我在尝试为临时管道获取唯一的文件名时遇到了一些尴尬,alas@LightnessRacesinOrbit我不知道这是否聪明,但我使用了
mktemp-d
mkfifo
来避免这个问题。
bash
ksh
都有
$RANDOM
变量。类似于
fifoname=$RANDOM$RANDOM$RANDOM.proj_name
的内容应该非常独特;-)祝大家好运。@Sheller:这是一个CGI应用程序,不是Bash脚本。如果你在创建fifo,你不是在shell中吗?祝你好运。哦,嗯,那可能是我想要的。我将进行测试。我想这里的关键是,如果我愿意,我可以用管道输出结果(我想我不能),但我不能在脚本中模拟管道,因此必须在命令行中给出。顺便说一句,我可能会在这一点上丢弃库包装器。您也可以使用
gnuplotmyfile.png
echo'设置终端pngcairo;绘图x'| gnuplot>myfile.png
。我认为,包装器是有意义的,如果你有一些数据,你在C++中生成,并且想要直接绘制这个数据。数据实际上来自磁盘上的一个大文件(反语),尽管脚本会动态生成。我很高兴rawly从
popen
获得结果;我只是希望POSIX也能以一种令人愉快的方式来导入配置。我真的想避免所有的临时文件。