Intereting Posts
подписанная арифметика дополнений Как сравнить строки в C для условия Найдите длину самого маленького windows, содержащего все символы строки в другой строке Каковы различные действительные прототипы «основной» функции? Определите, является ли строка допустимым адресом IPv4 в C Проверка буфера stdin, если он пуст Как создать точки, соответствующие гистограмме? Преобразует ли strlen то же значение для двоичных и ascii-данных Почему программа C печатает 0D вместо 0? (Когда EOF отправляется как Ctrl + D) MS VS 2008 и C99 Прямой доступ к жесткому диску без FS-программы на Linux Применяет ли пост-декремент указатель, уже обращающийся к базе массива, вызвать неопределенное поведение? Случайный массив с множеством чисел, получающих ошибку Препроцессор C с использованием закрывающей скобки родительского макроса OpenSSL SHA1 не проверяет тестовый вектор NIST SHAKE?

Как передать несколько команд, используя popen в C?

Я пытаюсь построить графики, используя GNUPLOT который является интерфейсом командной строки. Но мне нужно интегрировать его в c-программу, так что если программа будет выполнена, график будет нанесен на график. Это можно сделать, используя команду popen . Я сделал код, где я делаю popen("gnuplot","r") поэтому теперь, когда я запускаю программу, запускается gnuplot. Но мне нужно отправить несколько команд, таких как popen("sin(x)","r") после popen("gnuplot","r") чтобы график графика отображался при выполнении кода. Но я не знаю, как передать несколько команд. Пожалуйста, расскажите мне, как я могу передать несколько команд, используя popen Пожалуйста, помогите спасибо?

Вот код, который я использую для отправки одной команды:

 #include  int main() { FILE *fp; int status; fp = popen("gnuplot","r"); pclose(fp); return 0; } 

После того, как вы вызвали popen (), ваш файловый дескриптор «fp» открыт и позволяет вам записывать данные через него, которые команда gnuplot увидит в качестве входных данных. Обратите внимание, что тип должен быть тем, что вы хотите делать с каналом, а не с тем, что команда будет делать с ним, поэтому вы должны использовать «w», так как вы хотите писать. И вы можете выпустить несколько команд последовательно, пока не закончите.

Например:

 #include  int main() { FILE *fp; int status; fp = popen("gnuplot","w"); fprintf(fp, "plot sin(x)\n"); fprintf(fp, "plot tan(x)\n"); pclose(fp); return 0; } 

Отправляет «sin (x)» и «tan (x)», за которым следуют новые строки через канал, где gnuplot может считать его входным.

Вы должны писать, а не читать, в gnuplot , поэтому попробуйте:

 FILE *fp = popen("gnuplot","w"); if (!fp) { perror("popen gnuplot"); exit(EXIT_FAILURE); }; fprintf(fp, "plot sin(x)/x\n"); fflush(fp); 

Не забудьте сделать pclose(fp) где вы закончите. Но это, вероятно, закроет график. См. Вопрос §7.8 о часто задаваемых вопросах gnuplot