温馨提示:本文翻译自stackoverflow.com,查看原文请点击:pipe - Print with less(1) from C
c pipe posix less-unix

pipe - 用C中的less(1)打印

发布于 2020-04-13 12:53:15

我想打印一个很大的矩阵列表中的数据。它不适合终端(80行),因此使用标准打印功能进行打印很不方便;并且less已经被发明了,所以我不想使用ncurses来重新发明它;所以我想传递一些printfD行到less

我的第一个猜测是先写入文件,然后写入system("less -S file");,然后删除该文件。

一个更复杂的解决方案是减少重写,以便将其main()转换为less()我可以从C调用函数,而不是文件名字符串,我可以为其提供文件描述符或流。

有没有什么方法不需要创建文件,也不需要重写(少部分)?

查看更多

提问者
Cacahuete Frito
被浏览
74
Jonathan Leffler 2020-02-03 07:21

您可以考虑使用POSIX函数popen()pclose()

您将使用:

FILE *fp = popen("less", "w");

if (fp != NULL)
{
    …write output to fp…
    pclose(fp);
}
else
    …report error…

请注意,pclose()将等待less退出。如果需要,可以捕获pclose()并分析返回值请参阅之后如何检测shell是否无法执行命令popen()对此进行讨论。