Gtk_Init(int argc, char *argv[]) argv[0]可以指向 另一个程序的可执行文件名

这个是课程设计的一个作业,我用的是该死的RadHad9.03,单个窗口程序运行都没有错误,但是放到一起就不能弹出窗口,放到别的系统(如debian)下就没有这个问题!真是该死!(注:现在问题已经解决)

1,窗口程序:

#include <gtk/gtk.h>
#include <unistd.h>
#include <sys/types.h>

void  destroy (GtkWidget *widget,gpointer *data)
{
 gtk_main_quit();
}

int main (int argc, char *argv[])
{
 GtkWidget *window;
 GtkWidget *label;
 GtkWidget *vbox;
 GtkWidget *frame;
 
 gtk_init (&argc,&argv);

argc=1;                        /*由此处向下2行为修改部分,解决无法同时显示问题*/

argv[0]="./proc"/*proc为主函数的名字*/
 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_window_set_title(GTK_WINDOW (window), "The First Window");

 vbox = gtk_vbox_new (FALSE,20);

 gtk_container_add(GTK_CONTAINER (window),vbox);

 frame = gtk_frame_new ("The First Label");
 
 label = gtk_label_new ("================Hello================");

 gtk_container_add (GTK_CONTAINER (frame),label);
 gtk_box_pack_start(GTK_BOX (vbox),frame,FALSE,FALSE,0);

 gtk_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC (destroy),NULL);

 gtk_widget_show_all(window);

 gtk_main();

 return 0;
}
(这是个例子,其他两个可以和这个完全一样)

2,主程序:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
main()
{
 pid_t pid1,pid2;

 pid1=fork();
 if(pid1==0)
 {
  puts("The First Window Created\n");
  execv("./hello",NULL);
 }
 else
 {
  pid2=fork(); 
  if(pid2==0)
  {
   puts("The Second Window Created\n");
   execv("./haii",NULL);
  }
  else
  {
   puts("The Third Window Created\n");
   execv("./heii",NULL);
  }
  
 }
}


原文地址:https://www.cnblogs.com/cy163/p/785960.html