示例#1
0
void
gtk_pipe_open(void)
{
    int res;
    GError *error = NULL;
    
    res=pipe(pipeAppli);
    if (res!=0) pipe_error("PIPE_APPLI CREATION");
    
    res=pipe(pipeGtk);
    if (res!=0) pipe_error("PIPE_GTK CREATION");
    
    if ((pid=fork())==0) {   /*child*/
	close(pipeGtk[1]); 
	close(pipeAppli[0]);
	    
	fpip_in=pipeGtk[0];
	fpip_out= pipeAppli[1];

#if GTK_MAJOR_VERSION == 2
	Launch_Gtk_Process(fpip_in);
#else
	channel_in =  g_io_channel_unix_new(fpip_in);
	channel_out =  g_io_channel_unix_new(fpip_out);

	/* set to raw I/O, unbuffered */
	g_io_channel_set_encoding(channel_in, NULL, &error);
	g_io_channel_set_encoding(channel_out, NULL, &error);
	g_io_channel_set_buffered(channel_in, FALSE);
	g_io_channel_set_buffered(channel_out, FALSE);

	Launch_Gtk_Process(channel_in);
#endif
	    

	/* Won't come back from here */
	fprintf(stderr,"WARNING: come back from Gtk+\n");
	exit(0);
    }
    
    close(pipeGtk[0]);
    close(pipeAppli[1]);
    
    fpip_in= pipeAppli[0];
    fpip_out= pipeGtk[1];

#if GTK_MAJOR_VERSION == 3
    /*
    channel_in =  g_io_channel_unix_new(fpip_in);
    */
    //channel_out =  g_io_channel_unix_new(fpip_out);
    //g_io_channel_set_encoding(channel_in, NULL, &error);
    //g_io_channel_set_encoding(channel_out, NULL, &error);
#endif
}
示例#2
0
void
gtk_pipe_open(void)
{
    int res;
    
    res=pipe(pipeAppli);
    if (res!=0) pipe_error("PIPE_APPLI CREATION");
    
    res=pipe(pipeGtk);
    if (res!=0) pipe_error("PIPE_GTK CREATION");
    
    if ((pid=fork())==0) {   /*child*/
	close(pipeGtk[1]); 
	close(pipeAppli[0]);
	    
	fpip_in=pipeGtk[0];
	fpip_out= pipeAppli[1];
	    
	Launch_Gtk_Process(fpip_in);
	/* Won't come back from here */
	fprintf(stderr,"WARNING: come back from Gtk+\n");
	exit(0);
    }
    
    close(pipeGtk[0]);
    close(pipeAppli[1]);
    
    fpip_in= pipeAppli[0];
    fpip_out= pipeGtk[1];
}