Печатать меньше (1) из C - PullRequest
3 голосов
/ 03 февраля 2020

Я хотел бы напечатать большую матрицу данных, которые у меня есть в связанном списке. Он не помещается в терминал (80 строк), поэтому его неудобно печатать стандартными функциями печати; и less уже изобретен, поэтому я не хотел бы изобретать его заново, используя ncurses; поэтому я хочу передать printf d строк в less.

Моим первым предположением будет запись в файл, затем system("less -S file");, а затем удаление файла.

Более сложным решением было бы переписать меньше, чтобы его main() был преобразован в less() функцию, которую я могу вызвать из C, и вместо строки имени файла я мог бы предоставить ей дескриптор файла или поток .

Есть ли способ, который не требует создания файла и не требует перезаписи (части) меньше?

1 Ответ

3 голосов
/ 03 февраля 2020

Вы можете рассмотреть возможность использования функций POSIX popen() и pclose().

Вы будете использовать:

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

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

Примечание что pclose() будет ждать выхода less. Если вы хотите, вы можете получить возвращаемое значение из pclose() и проанализировать его. См. Как определить, не удалось ли оболочке выполнить команду после popen()? , чтобы обсудить это.

...