Hi there, I am trying to use popen() to flush the output of a command to a GtkTextView widget. It works fine for some commands, however, when I try flush the output of mencoder, it doesn't do its job.
Code:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>
void closeApp ( GtkWidget *window, gpointer data ) {
gtk_main_quit();
}
int main( int argc, char *argv[] ) {
GtkWidget *window, *swindow;
GtkWidget *text_view;
GtkWidget *hbox;
GtkTextBuffer *buffer;
FILE *read_fp;
char pbuffer[BUFSIZ + 1];
int chars_read;
char *command = "mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=300 -o ~/output.avi ~/input.avi";
gtk_init (&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
text_view = gtk_text_view_new();
hbox = gtk_hbox_new ( FALSE, 2 );
gtk_window_set_default_size(GTK_WINDOW(window), 400, 400);
gtk_window_set_title(GTK_WINDOW(window), "Command Output");
g_signal_connect ( GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC ( closeApp), NULL);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
gtk_text_view_set_editable(GTK_TEXT_VIEW (text_view), FALSE);
memset(pbuffer, '\0', sizeof(pbuffer));
read_fp = popen(command, "r");
if (read_fp != NULL) {
chars_read = fread( pbuffer, sizeof( char ), BUFSIZ, read_fp );
while (chars_read > 0) {
pbuffer[chars_read - 1] = '\0';
// printf("Reading:-\n %s\n", pbuffer);
chars_read = fread(pbuffer, sizeof(char), BUFSIZ, read_fp);
}
gtk_text_buffer_set_text (buffer, pbuffer, -1);
}
swindow = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(hbox), swindow, TRUE, TRUE, 5);
gtk_container_add(GTK_CONTAINER(swindow), text_view);
gtk_container_add(GTK_CONTAINER(window), hbox);
gtk_widget_show_all(window);
pclose(read_fp);
gtk_main ();
return 0;
}
Any ideas?